Bug: Refactor(connector): Migrate [AdyenPlatform, Ebanx, GPayments, Netcetera, Plaid] from crates/router to crates/hyperswitch_connectors



Migrate connectors form router crate to hyperswitch_connectors crate
diff --git a/Cargo.lock b/Cargo.lock
index 068bb1cecb7..39154406f6e 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3877,6 +3877,7 @@ dependencies = [
  "strum 0.26.3",
  "time",
  "unicode-normalization",
+ "unidecode",
  "url",
  "urlencoding",
  "uuid",
@@ -6551,7 +6552,6 @@ dependencies = [
  "totp-rs",
  "tracing-futures",
  "unicode-segmentation",
- "unidecode",
  "url",
  "urlencoding",
  "utoipa",
diff --git a/crates/hyperswitch_connectors/Cargo.toml b/crates/hyperswitch_connectors/Cargo.toml
index b8b74ae272a..d3372b79411 100644
--- a/crates/hyperswitch_connectors/Cargo.toml
+++ b/crates/hyperswitch_connectors/Cargo.toml
@@ -38,6 +38,7 @@ serde_json = "1.0.115"
 serde_qs = "0.12.0"
 serde_repr = "0.1.19"
 serde_urlencoded = "0.7.1"
+unidecode = "0.3.0"
 serde_with = "3.7.0"
 sha1 = { version = "0.10.6" }
 strum = { version = "0.26", features = ["derive"] }
diff --git a/crates/hyperswitch_connectors/src/connectors.rs b/crates/hyperswitch_connectors/src/connectors.rs
index 80e1253940b..2e5941880e3 100644
--- a/crates/hyperswitch_connectors/src/connectors.rs
+++ b/crates/hyperswitch_connectors/src/connectors.rs
@@ -1,5 +1,6 @@
 pub mod aci;
 pub mod adyen;
+pub mod adyenplatform;
 pub mod airwallex;
 pub mod amazonpay;
 pub mod authorizedotnet;
@@ -23,6 +24,7 @@ pub mod datatrans;
 pub mod deutschebank;
 pub mod digitalvirgo;
 pub mod dlocal;
+pub mod ebanx;
 pub mod elavon;
 pub mod facilitapay;
 pub mod fiserv;
@@ -33,6 +35,7 @@ pub mod getnet;
 pub mod globalpay;
 pub mod globepay;
 pub mod gocardless;
+pub mod gpayments;
 pub mod helcim;
 pub mod hipay;
 pub mod iatapay;
@@ -45,6 +48,7 @@ pub mod mifinity;
 pub mod mollie;
 pub mod moneris;
 pub mod multisafepay;
+pub mod netcetera;
 pub mod nexinets;
 pub mod nexixpay;
 pub mod nmi;
@@ -62,6 +66,7 @@ pub mod paypal;
 pub mod paystack;
 pub mod payu;
 pub mod placetopay;
+pub mod plaid;
 pub mod powertranz;
 pub mod prophetpay;
 pub mod rapyd;
@@ -86,25 +91,26 @@ pub mod xendit;
 pub mod zen;
 pub mod zsl;
 pub use self::{
-    aci::Aci, adyen::Adyen, airwallex::Airwallex, amazonpay::Amazonpay,
-    authorizedotnet::Authorizedotnet, bambora::Bambora, bamboraapac::Bamboraapac,
-    bankofamerica::Bankofamerica, billwerk::Billwerk, bitpay::Bitpay, bluesnap::Bluesnap,
-    boku::Boku, braintree::Braintree, cashtocode::Cashtocode, chargebee::Chargebee,
-    checkout::Checkout, coinbase::Coinbase, coingate::Coingate, cryptopay::Cryptopay,
-    ctp_mastercard::CtpMastercard, cybersource::Cybersource, datatrans::Datatrans,
-    deutschebank::Deutschebank, digitalvirgo::Digitalvirgo, dlocal::Dlocal, elavon::Elavon,
-    facilitapay::Facilitapay, fiserv::Fiserv, fiservemea::Fiservemea, fiuu::Fiuu, forte::Forte,
-    getnet::Getnet, globalpay::Globalpay, globepay::Globepay, gocardless::Gocardless,
-    helcim::Helcim, hipay::Hipay, iatapay::Iatapay, inespay::Inespay, itaubank::Itaubank,
-    jpmorgan::Jpmorgan, juspaythreedsserver::Juspaythreedsserver, klarna::Klarna,
-    mifinity::Mifinity, mollie::Mollie, moneris::Moneris, multisafepay::Multisafepay,
-    nexinets::Nexinets, nexixpay::Nexixpay, nmi::Nmi, nomupay::Nomupay, noon::Noon,
-    novalnet::Novalnet, nuvei::Nuvei, opayo::Opayo, opennode::Opennode, paybox::Paybox,
-    payeezy::Payeezy, payme::Payme, payone::Payone, paypal::Paypal, paystack::Paystack, payu::Payu,
-    placetopay::Placetopay, powertranz::Powertranz, prophetpay::Prophetpay, rapyd::Rapyd,
-    razorpay::Razorpay, recurly::Recurly, redsys::Redsys, riskified::Riskified, shift4::Shift4,
-    square::Square, stax::Stax, stripebilling::Stripebilling, taxjar::Taxjar, thunes::Thunes,
-    trustpay::Trustpay, tsys::Tsys, unified_authentication_service::UnifiedAuthenticationService,
-    volt::Volt, wellsfargo::Wellsfargo, worldline::Worldline, worldpay::Worldpay, xendit::Xendit,
-    zen::Zen, zsl::Zsl,
+    aci::Aci, adyen::Adyen, adyenplatform::Adyenplatform, airwallex::Airwallex,
+    amazonpay::Amazonpay, authorizedotnet::Authorizedotnet, bambora::Bambora,
+    bamboraapac::Bamboraapac, bankofamerica::Bankofamerica, billwerk::Billwerk, bitpay::Bitpay,
+    bluesnap::Bluesnap, boku::Boku, braintree::Braintree, cashtocode::Cashtocode,
+    chargebee::Chargebee, checkout::Checkout, coinbase::Coinbase, coingate::Coingate,
+    cryptopay::Cryptopay, ctp_mastercard::CtpMastercard, cybersource::Cybersource,
+    datatrans::Datatrans, deutschebank::Deutschebank, digitalvirgo::Digitalvirgo, dlocal::Dlocal,
+    ebanx::Ebanx, elavon::Elavon, facilitapay::Facilitapay, fiserv::Fiserv, fiservemea::Fiservemea,
+    fiuu::Fiuu, forte::Forte, getnet::Getnet, globalpay::Globalpay, globepay::Globepay,
+    gocardless::Gocardless, gpayments::Gpayments, helcim::Helcim, hipay::Hipay, iatapay::Iatapay,
+    inespay::Inespay, itaubank::Itaubank, jpmorgan::Jpmorgan,
+    juspaythreedsserver::Juspaythreedsserver, klarna::Klarna, mifinity::Mifinity, mollie::Mollie,
+    moneris::Moneris, multisafepay::Multisafepay, netcetera::Netcetera, nexinets::Nexinets,
+    nexixpay::Nexixpay, nmi::Nmi, nomupay::Nomupay, noon::Noon, novalnet::Novalnet, nuvei::Nuvei,
+    opayo::Opayo, opennode::Opennode, paybox::Paybox, payeezy::Payeezy, payme::Payme,
+    payone::Payone, paypal::Paypal, paystack::Paystack, payu::Payu, placetopay::Placetopay,
+    plaid::Plaid, powertranz::Powertranz, prophetpay::Prophetpay, rapyd::Rapyd, razorpay::Razorpay,
+    recurly::Recurly, redsys::Redsys, riskified::Riskified, shift4::Shift4, square::Square,
+    stax::Stax, stripebilling::Stripebilling, taxjar::Taxjar, thunes::Thunes, trustpay::Trustpay,
+    tsys::Tsys, unified_authentication_service::UnifiedAuthenticationService, volt::Volt,
+    wellsfargo::Wellsfargo, worldline::Worldline, worldpay::Worldpay, xendit::Xendit, zen::Zen,
+    zsl::Zsl,
 };
diff --git a/crates/router/src/connector/adyenplatform.rs b/crates/hyperswitch_connectors/src/connectors/adyenplatform.rs
similarity index 55%
rename from crates/router/src/connector/adyenplatform.rs
rename to crates/hyperswitch_connectors/src/connectors/adyenplatform.rs
index ba0dc3d3a2d..9f7b1b77353 100644
--- a/crates/router/src/connector/adyenplatform.rs
+++ b/crates/hyperswitch_connectors/src/connectors/adyenplatform.rs
@@ -3,8 +3,15 @@ use api_models::{self, webhooks::IncomingWebhookEvent};
 #[cfg(feature = "payouts")]
 use base64::Engine;
 #[cfg(feature = "payouts")]
+use common_utils::crypto;
+use common_utils::errors::CustomResult;
+#[cfg(feature = "payouts")]
+use common_utils::ext_traits::{ByteSliceExt as _, BytesExt};
+#[cfg(feature = "payouts")]
 use common_utils::request::RequestContent;
 #[cfg(feature = "payouts")]
+use common_utils::request::{Method, Request, RequestBuilder};
+#[cfg(feature = "payouts")]
 use common_utils::types::MinorUnitForConnector;
 #[cfg(feature = "payouts")]
 use common_utils::types::{AmountConvertor, MinorUnit};
@@ -13,35 +20,50 @@ use error_stack::report;
 use error_stack::ResultExt;
 #[cfg(feature = "payouts")]
 use http::HeaderName;
-use hyperswitch_interfaces::webhooks::IncomingWebhookFlowError;
-use masking::Maskable;
 #[cfg(feature = "payouts")]
-use masking::Secret;
+use hyperswitch_domain_models::router_data::{ErrorResponse, RouterData};
+#[cfg(feature = "payouts")]
+use hyperswitch_domain_models::router_flow_types::PoFulfill;
+#[cfg(feature = "payouts")]
+use hyperswitch_domain_models::types::{PayoutsData, PayoutsResponseData, PayoutsRouterData};
+use hyperswitch_domain_models::{
+    api::ApplicationResponse,
+    router_data::{AccessToken, ConnectorAuthType},
+    router_flow_types::{
+        AccessTokenAuth, Authorize, Capture, Execute, PSync, PaymentMethodToken, RSync, Session,
+        SetupMandate, Void,
+    },
+    router_request_types::{
+        AccessTokenRequestData, PaymentMethodTokenizationData, PaymentsAuthorizeData,
+        PaymentsCancelData, PaymentsCaptureData, PaymentsSessionData, PaymentsSyncData,
+        RefundsData, SetupMandateRequestData,
+    },
+    router_response_types::{PaymentsResponseData, RefundsResponseData},
+};
+#[cfg(feature = "payouts")]
+use hyperswitch_interfaces::events::connector_api_logs::ConnectorEvent;
+#[cfg(feature = "payouts")]
+use hyperswitch_interfaces::types::{PayoutFulfillType, Response};
+use hyperswitch_interfaces::{
+    api::{self, ConnectorCommon, ConnectorIntegration, ConnectorSpecifications},
+    configs::Connectors,
+    errors::ConnectorError,
+    webhooks::{IncomingWebhook, IncomingWebhookFlowError, IncomingWebhookRequestDetails},
+};
+use masking::{Mask as _, Maskable, Secret};
 #[cfg(feature = "payouts")]
 use ring::hmac;
 #[cfg(feature = "payouts")]
 use router_env::{instrument, tracing};
+#[cfg(feature = "payouts")]
+use transformers::get_adyen_webhook_event;
 
 use self::transformers as adyenplatform;
+use crate::constants::headers;
 #[cfg(feature = "payouts")]
-use crate::connector::utils::convert_amount;
-use crate::{
-    configs::settings,
-    core::errors::{self, CustomResult},
-    headers,
-    services::{self, request::Mask, ConnectorSpecifications, ConnectorValidation},
-    types::{
-        self,
-        api::{self, ConnectorCommon},
-    },
-};
+use crate::types::ResponseRouterData;
 #[cfg(feature = "payouts")]
-use crate::{
-    consts,
-    events::connector_api_logs::ConnectorEvent,
-    types::transformers::ForeignFrom,
-    utils::{crypto, ByteSliceExt, BytesExt},
-};
+use crate::utils::convert_amount;
 
 #[derive(Clone)]
 pub struct Adyenplatform {
@@ -64,35 +86,34 @@ impl ConnectorCommon for Adyenplatform {
 
     fn get_auth_header(
         &self,
-        auth_type: &types::ConnectorAuthType,
-    ) -> CustomResult<Vec<(String, Maskable<String>)>, errors::ConnectorError> {
+        auth_type: &ConnectorAuthType,
+    ) -> CustomResult<Vec<(String, Maskable<String>)>, ConnectorError> {
         let auth = adyenplatform::AdyenplatformAuthType::try_from(auth_type)
-            .change_context(errors::ConnectorError::FailedToObtainAuthType)?;
+            .change_context(ConnectorError::FailedToObtainAuthType)?;
         Ok(vec![(
             headers::AUTHORIZATION.to_string(),
             auth.api_key.into_masked(),
         )])
     }
 
-    fn base_url<'a>(&self, connectors: &'a settings::Connectors) -> &'a str {
+    fn base_url<'a>(&self, connectors: &'a Connectors) -> &'a str {
         connectors.adyenplatform.base_url.as_ref()
     }
 
     #[cfg(feature = "payouts")]
     fn build_error_response(
         &self,
-        res: types::Response,
+        res: Response,
         event_builder: Option<&mut ConnectorEvent>,
-    ) -> CustomResult<types::ErrorResponse, errors::ConnectorError> {
+    ) -> CustomResult<ErrorResponse, ConnectorError> {
         let response: adyenplatform::AdyenTransferErrorResponse = res
             .response
             .parse_struct("AdyenTransferErrorResponse")
-            .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
-
+            .change_context(ConnectorError::ResponseDeserializationFailed)?;
         event_builder.map(|i| i.set_response_body(&response));
         router_env::logger::info!(connector_response=?response);
 
-        Ok(types::ErrorResponse {
+        Ok(ErrorResponse {
             status_code: res.status_code,
             code: response.error_code,
             message: response.title,
@@ -114,92 +135,46 @@ impl api::PaymentCapture for Adyenplatform {}
 impl api::MandateSetup for Adyenplatform {}
 impl api::ConnectorAccessToken for Adyenplatform {}
 impl api::PaymentToken for Adyenplatform {}
-impl ConnectorValidation for Adyenplatform {}
-
-impl
-    services::ConnectorIntegration<
-        api::PaymentMethodToken,
-        types::PaymentMethodTokenizationData,
-        types::PaymentsResponseData,
-    > for Adyenplatform
-{
-}
+impl api::ConnectorValidation for Adyenplatform {}
 
-impl
-    services::ConnectorIntegration<
-        api::AccessTokenAuth,
-        types::AccessTokenRequestData,
-        types::AccessToken,
-    > for Adyenplatform
+impl ConnectorIntegration<PaymentMethodToken, PaymentMethodTokenizationData, PaymentsResponseData>
+    for Adyenplatform
 {
 }
 
-impl
-    services::ConnectorIntegration<
-        api::SetupMandate,
-        types::SetupMandateRequestData,
-        types::PaymentsResponseData,
-    > for Adyenplatform
+impl ConnectorIntegration<AccessTokenAuth, AccessTokenRequestData, AccessToken> for Adyenplatform {}
+
+impl ConnectorIntegration<SetupMandate, SetupMandateRequestData, PaymentsResponseData>
+    for Adyenplatform
 {
 }
 
 impl api::PaymentSession for Adyenplatform {}
 
-impl
-    services::ConnectorIntegration<
-        api::Session,
-        types::PaymentsSessionData,
-        types::PaymentsResponseData,
-    > for Adyenplatform
-{
-}
+impl ConnectorIntegration<Session, PaymentsSessionData, PaymentsResponseData> for Adyenplatform {}
 
-impl
-    services::ConnectorIntegration<
-        api::Capture,
-        types::PaymentsCaptureData,
-        types::PaymentsResponseData,
-    > for Adyenplatform
-{
-}
+impl ConnectorIntegration<Capture, PaymentsCaptureData, PaymentsResponseData> for Adyenplatform {}
 
-impl
-    services::ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsResponseData>
-    for Adyenplatform
-{
-}
+impl ConnectorIntegration<PSync, PaymentsSyncData, PaymentsResponseData> for Adyenplatform {}
 
-impl
-    services::ConnectorIntegration<
-        api::Authorize,
-        types::PaymentsAuthorizeData,
-        types::PaymentsResponseData,
-    > for Adyenplatform
+impl ConnectorIntegration<Authorize, PaymentsAuthorizeData, PaymentsResponseData>
+    for Adyenplatform
 {
 }
 
-impl
-    services::ConnectorIntegration<
-        api::Void,
-        types::PaymentsCancelData,
-        types::PaymentsResponseData,
-    > for Adyenplatform
-{
-}
+impl ConnectorIntegration<Void, PaymentsCancelData, PaymentsResponseData> for Adyenplatform {}
 
 impl api::Payouts for Adyenplatform {}
 #[cfg(feature = "payouts")]
 impl api::PayoutFulfill for Adyenplatform {}
 
 #[cfg(feature = "payouts")]
-impl services::ConnectorIntegration<api::PoFulfill, types::PayoutsData, types::PayoutsResponseData>
-    for Adyenplatform
-{
+impl ConnectorIntegration<PoFulfill, PayoutsData, PayoutsResponseData> for Adyenplatform {
     fn get_url(
         &self,
-        _req: &types::PayoutsRouterData<api::PoFulfill>,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<String, errors::ConnectorError> {
+        _req: &PayoutsRouterData<PoFulfill>,
+        connectors: &Connectors,
+    ) -> CustomResult<String, ConnectorError> {
         Ok(format!(
             "{}btl/v4/transfers",
             connectors.adyenplatform.base_url,
@@ -208,17 +183,15 @@ impl services::ConnectorIntegration<api::PoFulfill, types::PayoutsData, types::P
 
     fn get_headers(
         &self,
-        req: &types::PayoutsRouterData<api::PoFulfill>,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, Maskable<String>)>, errors::ConnectorError> {
+        req: &PayoutsRouterData<PoFulfill>,
+        _connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, Maskable<String>)>, ConnectorError> {
         let mut header = vec![(
             headers::CONTENT_TYPE.to_string(),
-            types::PayoutFulfillType::get_content_type(self)
-                .to_string()
-                .into(),
+            PayoutFulfillType::get_content_type(self).to_string().into(),
         )];
         let auth = adyenplatform::AdyenplatformAuthType::try_from(&req.connector_auth_type)
-            .change_context(errors::ConnectorError::FailedToObtainAuthType)?;
+            .change_context(ConnectorError::FailedToObtainAuthType)?;
         let mut api_key = vec![(
             headers::AUTHORIZATION.to_string(),
             auth.api_key.into_masked(),
@@ -229,9 +202,9 @@ impl services::ConnectorIntegration<api::PoFulfill, types::PayoutsData, types::P
 
     fn get_request_body(
         &self,
-        req: &types::PayoutsRouterData<api::PoFulfill>,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<RequestContent, errors::ConnectorError> {
+        req: &PayoutsRouterData<PoFulfill>,
+        _connectors: &Connectors,
+    ) -> CustomResult<RequestContent, ConnectorError> {
         let amount = convert_amount(
             self.amount_converter,
             req.request.minor_amount,
@@ -245,19 +218,15 @@ impl services::ConnectorIntegration<api::PoFulfill, types::PayoutsData, types::P
 
     fn build_request(
         &self,
-        req: &types::PayoutsRouterData<api::PoFulfill>,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
-        let request = services::RequestBuilder::new()
-            .method(services::Method::Post)
-            .url(&types::PayoutFulfillType::get_url(self, req, connectors)?)
+        req: &PayoutsRouterData<PoFulfill>,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, ConnectorError> {
+        let request = RequestBuilder::new()
+            .method(Method::Post)
+            .url(&PayoutFulfillType::get_url(self, req, connectors)?)
             .attach_default_headers()
-            .headers(types::PayoutFulfillType::get_headers(
-                self, req, connectors,
-            )?)
-            .set_body(types::PayoutFulfillType::get_request_body(
-                self, req, connectors,
-            )?)
+            .headers(PayoutFulfillType::get_headers(self, req, connectors)?)
+            .set_body(PayoutFulfillType::get_request_body(self, req, connectors)?)
             .build();
 
         Ok(Some(request))
@@ -266,19 +235,19 @@ impl services::ConnectorIntegration<api::PoFulfill, types::PayoutsData, types::P
     #[instrument(skip_all)]
     fn handle_response(
         &self,
-        data: &types::PayoutsRouterData<api::PoFulfill>,
+        data: &PayoutsRouterData<PoFulfill>,
         event_builder: Option<&mut ConnectorEvent>,
-        res: types::Response,
-    ) -> CustomResult<types::PayoutsRouterData<api::PoFulfill>, errors::ConnectorError> {
+        res: Response,
+    ) -> CustomResult<PayoutsRouterData<PoFulfill>, ConnectorError> {
         let response: adyenplatform::AdyenTransferResponse = res
             .response
             .parse_struct("AdyenTransferResponse")
-            .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
+            .change_context(ConnectorError::ResponseDeserializationFailed)?;
 
         event_builder.map(|i| i.set_response_body(&response));
         router_env::logger::info!(connector_response=?response);
 
-        types::RouterData::try_from(types::ResponseRouterData {
+        RouterData::try_from(ResponseRouterData {
             response,
             data: data.clone(),
             http_code: res.status_code,
@@ -287,9 +256,9 @@ impl services::ConnectorIntegration<api::PoFulfill, types::PayoutsData, types::P
 
     fn get_error_response(
         &self,
-        res: types::Response,
+        res: Response,
         event_builder: Option<&mut ConnectorEvent>,
-    ) -> CustomResult<types::ErrorResponse, errors::ConnectorError> {
+    ) -> CustomResult<ErrorResponse, ConnectorError> {
         self.build_error_response(res, event_builder)
     }
 }
@@ -298,58 +267,54 @@ impl api::Refund for Adyenplatform {}
 impl api::RefundExecute for Adyenplatform {}
 impl api::RefundSync for Adyenplatform {}
 
-impl services::ConnectorIntegration<api::Execute, types::RefundsData, types::RefundsResponseData>
-    for Adyenplatform
-{
-}
+impl ConnectorIntegration<Execute, RefundsData, RefundsResponseData> for Adyenplatform {}
 
-impl services::ConnectorIntegration<api::RSync, types::RefundsData, types::RefundsResponseData>
-    for Adyenplatform
-{
-}
+impl ConnectorIntegration<RSync, RefundsData, RefundsResponseData> for Adyenplatform {}
 
 #[async_trait::async_trait]
-impl api::IncomingWebhook for Adyenplatform {
+impl IncomingWebhook for Adyenplatform {
     #[cfg(feature = "payouts")]
     fn get_webhook_source_verification_algorithm(
         &self,
-        _request: &api::IncomingWebhookRequestDetails<'_>,
-    ) -> CustomResult<Box<dyn crypto::VerifySignature + Send>, errors::ConnectorError> {
+        _request: &IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<Box<dyn crypto::VerifySignature + Send>, ConnectorError> {
         Ok(Box::new(crypto::HmacSha256))
     }
 
     #[cfg(feature = "payouts")]
     fn get_webhook_source_verification_signature(
         &self,
-        request: &api::IncomingWebhookRequestDetails<'_>,
+        request: &IncomingWebhookRequestDetails<'_>,
         _connector_webhook_secrets: &api_models::webhooks::ConnectorWebhookSecrets,
-    ) -> CustomResult<Vec<u8>, errors::ConnectorError> {
+    ) -> CustomResult<Vec<u8>, ConnectorError> {
         let base64_signature = request
             .headers
             .get(HeaderName::from_static("hmacsignature"))
-            .ok_or(errors::ConnectorError::WebhookSourceVerificationFailed)?;
+            .ok_or(ConnectorError::WebhookSourceVerificationFailed)?;
         Ok(base64_signature.as_bytes().to_vec())
     }
 
     #[cfg(feature = "payouts")]
     fn get_webhook_source_verification_message(
         &self,
-        request: &api::IncomingWebhookRequestDetails<'_>,
+        request: &IncomingWebhookRequestDetails<'_>,
         _merchant_id: &common_utils::id_type::MerchantId,
         _connector_webhook_secrets: &api_models::webhooks::ConnectorWebhookSecrets,
-    ) -> CustomResult<Vec<u8>, errors::ConnectorError> {
+    ) -> CustomResult<Vec<u8>, ConnectorError> {
         Ok(request.body.to_vec())
     }
 
     #[cfg(feature = "payouts")]
     async fn verify_webhook_source(
         &self,
-        request: &api::IncomingWebhookRequestDetails<'_>,
+        request: &IncomingWebhookRequestDetails<'_>,
         merchant_id: &common_utils::id_type::MerchantId,
         connector_webhook_details: Option<common_utils::pii::SecretSerdeValue>,
         _connector_account_details: crypto::Encryptable<Secret<serde_json::Value>>,
         connector_label: &str,
-    ) -> CustomResult<bool, errors::ConnectorError> {
+    ) -> CustomResult<bool, ConnectorError> {
+        use common_utils::consts;
+
         let connector_webhook_secrets = self
             .get_webhook_source_verification_merchant_secret(
                 merchant_id,
@@ -357,11 +322,11 @@ impl api::IncomingWebhook for Adyenplatform {
                 connector_webhook_details,
             )
             .await
-            .change_context(errors::ConnectorError::WebhookSourceVerificationFailed)?;
+            .change_context(ConnectorError::WebhookSourceVerificationFailed)?;
 
         let signature = self
             .get_webhook_source_verification_signature(request, &connector_webhook_secrets)
-            .change_context(errors::ConnectorError::WebhookSourceVerificationFailed)?;
+            .change_context(ConnectorError::WebhookSourceVerificationFailed)?;
 
         let message = self
             .get_webhook_source_verification_message(
@@ -369,10 +334,10 @@ impl api::IncomingWebhook for Adyenplatform {
                 merchant_id,
                 &connector_webhook_secrets,
             )
-            .change_context(errors::ConnectorError::WebhookSourceVerificationFailed)?;
+            .change_context(ConnectorError::WebhookSourceVerificationFailed)?;
 
         let raw_key = hex::decode(connector_webhook_secrets.secret)
-            .change_context(errors::ConnectorError::WebhookVerificationSecretInvalid)?;
+            .change_context(ConnectorError::WebhookVerificationSecretInvalid)?;
 
         let signing_key = hmac::Key::new(hmac::HMAC_SHA256, &raw_key);
         let signed_messaged = hmac::sign(&signing_key, &message);
@@ -382,15 +347,15 @@ impl api::IncomingWebhook for Adyenplatform {
 
     fn get_webhook_object_reference_id(
         &self,
-        #[cfg(feature = "payouts")] request: &api::IncomingWebhookRequestDetails<'_>,
-        #[cfg(not(feature = "payouts"))] _request: &api::IncomingWebhookRequestDetails<'_>,
-    ) -> CustomResult<api_models::webhooks::ObjectReferenceId, errors::ConnectorError> {
+        #[cfg(feature = "payouts")] request: &IncomingWebhookRequestDetails<'_>,
+        #[cfg(not(feature = "payouts"))] _request: &IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<api_models::webhooks::ObjectReferenceId, ConnectorError> {
         #[cfg(feature = "payouts")]
         {
             let webhook_body: adyenplatform::AdyenplatformIncomingWebhook = request
                 .body
                 .parse_struct("AdyenplatformIncomingWebhook")
-                .change_context(errors::ConnectorError::WebhookSourceVerificationFailed)?;
+                .change_context(ConnectorError::WebhookSourceVerificationFailed)?;
 
             Ok(api_models::webhooks::ObjectReferenceId::PayoutId(
                 api_models::webhooks::PayoutIdType::PayoutAttemptId(webhook_body.data.reference),
@@ -398,18 +363,17 @@ impl api::IncomingWebhook for Adyenplatform {
         }
         #[cfg(not(feature = "payouts"))]
         {
-            Err(report!(errors::ConnectorError::WebhooksNotImplemented))
+            Err(report!(ConnectorError::WebhooksNotImplemented))
         }
     }
 
     fn get_webhook_api_response(
         &self,
-        _request: &api::IncomingWebhookRequestDetails<'_>,
+        _request: &IncomingWebhookRequestDetails<'_>,
         error_kind: Option<IncomingWebhookFlowError>,
-    ) -> CustomResult<services::api::ApplicationResponse<serde_json::Value>, errors::ConnectorError>
-    {
+    ) -> CustomResult<ApplicationResponse<serde_json::Value>, ConnectorError> {
         if error_kind.is_some() {
-            Ok(services::api::ApplicationResponse::JsonWithHeaders((
+            Ok(ApplicationResponse::JsonWithHeaders((
                 serde_json::Value::Null,
                 vec![(
                     "x-http-code".to_string(),
@@ -417,50 +381,50 @@ impl api::IncomingWebhook for Adyenplatform {
                 )],
             )))
         } else {
-            Ok(services::api::ApplicationResponse::StatusOk)
+            Ok(ApplicationResponse::StatusOk)
         }
     }
 
     fn get_webhook_event_type(
         &self,
-        #[cfg(feature = "payouts")] request: &api::IncomingWebhookRequestDetails<'_>,
-        #[cfg(not(feature = "payouts"))] _request: &api::IncomingWebhookRequestDetails<'_>,
-    ) -> CustomResult<IncomingWebhookEvent, errors::ConnectorError> {
+        #[cfg(feature = "payouts")] request: &IncomingWebhookRequestDetails<'_>,
+        #[cfg(not(feature = "payouts"))] _request: &IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<IncomingWebhookEvent, ConnectorError> {
         #[cfg(feature = "payouts")]
         {
             let webhook_body: adyenplatform::AdyenplatformIncomingWebhook = request
                 .body
                 .parse_struct("AdyenplatformIncomingWebhook")
-                .change_context(errors::ConnectorError::WebhookSourceVerificationFailed)?;
+                .change_context(ConnectorError::WebhookSourceVerificationFailed)?;
 
-            Ok(IncomingWebhookEvent::foreign_from((
+            Ok(get_adyen_webhook_event(
                 webhook_body.webhook_type,
                 webhook_body.data.status,
                 webhook_body.data.tracking,
-            )))
+            ))
         }
         #[cfg(not(feature = "payouts"))]
         {
-            Err(report!(errors::ConnectorError::WebhooksNotImplemented))
+            Err(report!(ConnectorError::WebhooksNotImplemented))
         }
     }
 
     fn get_webhook_resource_object(
         &self,
-        #[cfg(feature = "payouts")] request: &api::IncomingWebhookRequestDetails<'_>,
-        #[cfg(not(feature = "payouts"))] _request: &api::IncomingWebhookRequestDetails<'_>,
-    ) -> CustomResult<Box<dyn masking::ErasedMaskSerialize>, errors::ConnectorError> {
+        #[cfg(feature = "payouts")] request: &IncomingWebhookRequestDetails<'_>,
+        #[cfg(not(feature = "payouts"))] _request: &IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<Box<dyn masking::ErasedMaskSerialize>, ConnectorError> {
         #[cfg(feature = "payouts")]
         {
             let webhook_body: adyenplatform::AdyenplatformIncomingWebhook = request
                 .body
                 .parse_struct("AdyenplatformIncomingWebhook")
-                .change_context(errors::ConnectorError::WebhookSourceVerificationFailed)?;
+                .change_context(ConnectorError::WebhookSourceVerificationFailed)?;
             Ok(Box::new(webhook_body))
         }
         #[cfg(not(feature = "payouts"))]
         {
-            Err(report!(errors::ConnectorError::WebhooksNotImplemented))
+            Err(report!(ConnectorError::WebhooksNotImplemented))
         }
     }
 }
diff --git a/crates/router/src/connector/adyenplatform/transformers.rs b/crates/hyperswitch_connectors/src/connectors/adyenplatform/transformers.rs
similarity index 63%
rename from crates/router/src/connector/adyenplatform/transformers.rs
rename to crates/hyperswitch_connectors/src/connectors/adyenplatform/transformers.rs
index 20e26c427bf..31d3e77a7fd 100644
--- a/crates/router/src/connector/adyenplatform/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/adyenplatform/transformers.rs
@@ -1,5 +1,7 @@
 use common_utils::types::MinorUnit;
 use error_stack::Report;
+use hyperswitch_domain_models::router_data::ConnectorAuthType;
+use hyperswitch_interfaces::errors::ConnectorError;
 use masking::Secret;
 use serde::Serialize;
 
@@ -8,24 +10,22 @@ pub mod payouts;
 #[cfg(feature = "payouts")]
 pub use payouts::*;
 
-use crate::{core::errors, types};
-
 // Error signature
-type Error = Report<errors::ConnectorError>;
+type Error = Report<ConnectorError>;
 
 // Auth Struct
 pub struct AdyenplatformAuthType {
     pub(super) api_key: Secret<String>,
 }
 
-impl TryFrom<&types::ConnectorAuthType> for AdyenplatformAuthType {
+impl TryFrom<&ConnectorAuthType> for AdyenplatformAuthType {
     type Error = Error;
-    fn try_from(auth_type: &types::ConnectorAuthType) -> Result<Self, Self::Error> {
+    fn try_from(auth_type: &ConnectorAuthType) -> Result<Self, Self::Error> {
         match auth_type {
-            types::ConnectorAuthType::HeaderKey { api_key } => Ok(Self {
+            ConnectorAuthType::HeaderKey { api_key } => Ok(Self {
                 api_key: api_key.to_owned(),
             }),
-            _ => Err(errors::ConnectorError::FailedToObtainAuthType.into()),
+            _ => Err(ConnectorError::FailedToObtainAuthType.into()),
         }
     }
 }
@@ -37,7 +37,7 @@ pub struct AdyenPlatformRouterData<T> {
 }
 
 impl<T> TryFrom<(MinorUnit, T)> for AdyenPlatformRouterData<T> {
-    type Error = Report<errors::ConnectorError>;
+    type Error = Report<ConnectorError>;
     fn try_from((amount, item): (MinorUnit, T)) -> Result<Self, Self::Error> {
         Ok(Self {
             amount,
diff --git a/crates/router/src/connector/adyenplatform/transformers/payouts.rs b/crates/hyperswitch_connectors/src/connectors/adyenplatform/transformers/payouts.rs
similarity index 81%
rename from crates/router/src/connector/adyenplatform/transformers/payouts.rs
rename to crates/hyperswitch_connectors/src/connectors/adyenplatform/transformers/payouts.rs
index f3f398760c4..1b1f2b42b77 100644
--- a/crates/router/src/connector/adyenplatform/transformers/payouts.rs
+++ b/crates/hyperswitch_connectors/src/connectors/adyenplatform/transformers/payouts.rs
@@ -1,18 +1,19 @@
+use api_models::payouts;
 #[cfg(feature = "payouts")]
 use api_models::webhooks;
+use common_enums::enums;
 use common_utils::pii;
 use error_stack::{report, ResultExt};
+use hyperswitch_domain_models::types;
+use hyperswitch_interfaces::errors::ConnectorError;
 use masking::Secret;
 use serde::{Deserialize, Serialize};
 
 use super::{AdyenPlatformRouterData, Error};
 use crate::{
-    connector::{
-        adyen::transformers as adyen,
-        utils::{self, PayoutsData, RouterData},
-    },
-    core::errors,
-    types::{self, api::payouts, storage::enums, transformers::ForeignFrom},
+    connectors::adyen::transformers as adyen,
+    types::PayoutsResponseRouterData,
+    utils::{self, PayoutsData as _, RouterData as _},
 };
 
 #[derive(Debug, Default, Serialize, Deserialize)]
@@ -24,9 +25,7 @@ impl TryFrom<&Option<pii::SecretSerdeValue>> for AdyenPlatformConnectorMetadataO
     type Error = Error;
     fn try_from(meta_data: &Option<pii::SecretSerdeValue>) -> Result<Self, Self::Error> {
         let metadata: Self = utils::to_connector_meta_from_secret::<Self>(meta_data.clone())
-            .change_context(errors::ConnectorError::InvalidConnectorConfig {
-                config: "metadata",
-            })?;
+            .change_context(ConnectorError::InvalidConnectorConfig { config: "metadata" })?;
         Ok(metadata)
     }
 }
@@ -182,28 +181,28 @@ impl<F> TryFrom<&AdyenPlatformRouterData<&types::PayoutsRouterData<F>>> for Adye
         let request = item.router_data.request.to_owned();
         match item.router_data.get_payout_method_data()? {
             payouts::PayoutMethodData::Card(_) | payouts::PayoutMethodData::Wallet(_) => {
-                Err(errors::ConnectorError::NotImplemented(
+                Err(ConnectorError::NotImplemented(
                     utils::get_unimplemented_payment_method_error_message("Adyenplatform"),
                 ))?
             }
 
             payouts::PayoutMethodData::Bank(bd) => {
                 let bank_details = match bd {
-                    payouts::BankPayout::Sepa(b) => AdyenBankAccountIdentification {
+                    payouts::Bank::Sepa(b) => AdyenBankAccountIdentification {
                         bank_type: "iban".to_string(),
                         account_details: AdyenBankAccountIdentificationDetails::Sepa(SepaDetails {
                             iban: b.iban,
                         }),
                     },
-                    payouts::BankPayout::Ach(..) => Err(errors::ConnectorError::NotSupported {
+                    payouts::Bank::Ach(..) => Err(ConnectorError::NotSupported {
                         message: "Bank transfer via ACH is not supported".to_string(),
                         connector: "Adyenplatform",
                     })?,
-                    payouts::BankPayout::Bacs(..) => Err(errors::ConnectorError::NotSupported {
+                    payouts::Bank::Bacs(..) => Err(ConnectorError::NotSupported {
                         message: "Bank transfer via Bacs is not supported".to_string(),
                         connector: "Adyenplatform",
                     })?,
-                    payouts::BankPayout::Pix(..) => Err(errors::ConnectorError::NotSupported {
+                    payouts::Bank::Pix(..) => Err(ConnectorError::NotSupported {
                         message: "Bank transfer via Pix is not supported".to_string(),
                         connector: "Adyenplatform",
                     })?,
@@ -234,15 +233,14 @@ impl<F> TryFrom<&AdyenPlatformRouterData<&types::PayoutsRouterData<F>>> for Adye
                     )?;
                 let balance_account_id = adyen_connector_metadata_object
                     .source_balance_account
-                    .ok_or(errors::ConnectorError::InvalidConnectorConfig {
+                    .ok_or(ConnectorError::InvalidConnectorConfig {
                         config: "metadata.source_balance_account",
                     })?;
-                let priority =
-                    request
-                        .priority
-                        .ok_or(errors::ConnectorError::MissingRequiredField {
-                            field_name: "priority",
-                        })?;
+                let priority = request
+                    .priority
+                    .ok_or(ConnectorError::MissingRequiredField {
+                        field_name: "priority",
+                    })?;
                 let payout_type = request.get_payout_type()?;
                 Ok(Self {
                     amount: adyen::Amount {
@@ -262,12 +260,12 @@ impl<F> TryFrom<&AdyenPlatformRouterData<&types::PayoutsRouterData<F>>> for Adye
     }
 }
 
-impl<F> TryFrom<types::PayoutsResponseRouterData<F, AdyenTransferResponse>>
+impl<F> TryFrom<PayoutsResponseRouterData<F, AdyenTransferResponse>>
     for types::PayoutsRouterData<F>
 {
     type Error = Error;
     fn try_from(
-        item: types::PayoutsResponseRouterData<F, AdyenTransferResponse>,
+        item: PayoutsResponseRouterData<F, AdyenTransferResponse>,
     ) -> Result<Self, Self::Error> {
         let response: AdyenTransferResponse = item.response;
         let status = enums::PayoutStatus::from(response.status);
@@ -335,7 +333,7 @@ impl TryFrom<enums::PayoutType> for AdyenPayoutMethod {
         match payout_type {
             enums::PayoutType::Bank => Ok(Self::Bank),
             enums::PayoutType::Card | enums::PayoutType::Wallet => {
-                Err(report!(errors::ConnectorError::NotSupported {
+                Err(report!(ConnectorError::NotSupported {
                     message: "Card or wallet payouts".to_string(),
                     connector: "Adyenplatform",
                 }))
@@ -398,44 +396,34 @@ pub enum AdyenplatformWebhookStatus {
     Returned,
     Received,
 }
-
 #[cfg(feature = "payouts")]
-impl
-    ForeignFrom<(
-        AdyenplatformWebhookEventType,
-        AdyenplatformWebhookStatus,
-        Option<AdyenplatformInstantStatus>,
-    )> for webhooks::IncomingWebhookEvent
-{
-    fn foreign_from(
-        (event_type, status, instant_status): (
-            AdyenplatformWebhookEventType,
-            AdyenplatformWebhookStatus,
-            Option<AdyenplatformInstantStatus>,
-        ),
-    ) -> Self {
-        match (event_type, status, instant_status) {
-            (AdyenplatformWebhookEventType::PayoutCreated, _, _) => Self::PayoutCreated,
-            (AdyenplatformWebhookEventType::PayoutUpdated, _, Some(instant_status)) => {
-                match (instant_status.status, instant_status.estimated_arrival_time) {
-                    (Some(InstantPriorityStatus::Credited), _) | (None, Some(_)) => {
-                        Self::PayoutSuccess
-                    }
-                    _ => Self::PayoutProcessing,
+pub fn get_adyen_webhook_event(
+    event_type: AdyenplatformWebhookEventType,
+    status: AdyenplatformWebhookStatus,
+    instant_status: Option<AdyenplatformInstantStatus>,
+) -> webhooks::IncomingWebhookEvent {
+    match (event_type, status, instant_status) {
+        (AdyenplatformWebhookEventType::PayoutCreated, _, _) => {
+            webhooks::IncomingWebhookEvent::PayoutCreated
+        }
+        (AdyenplatformWebhookEventType::PayoutUpdated, _, Some(instant_status)) => {
+            match (instant_status.status, instant_status.estimated_arrival_time) {
+                (Some(InstantPriorityStatus::Credited), _) | (None, Some(_)) => {
+                    webhooks::IncomingWebhookEvent::PayoutSuccess
                 }
+                _ => webhooks::IncomingWebhookEvent::PayoutProcessing,
             }
-            (AdyenplatformWebhookEventType::PayoutUpdated, status, _) => match status {
-                AdyenplatformWebhookStatus::Authorised
-                | AdyenplatformWebhookStatus::Booked
-                | AdyenplatformWebhookStatus::Received => Self::PayoutCreated,
-                AdyenplatformWebhookStatus::Pending => Self::PayoutProcessing,
-                AdyenplatformWebhookStatus::Failed => Self::PayoutFailure,
-                AdyenplatformWebhookStatus::Returned => Self::PayoutReversed,
-            },
         }
+        (AdyenplatformWebhookEventType::PayoutUpdated, status, _) => match status {
+            AdyenplatformWebhookStatus::Authorised
+            | AdyenplatformWebhookStatus::Booked
+            | AdyenplatformWebhookStatus::Received => webhooks::IncomingWebhookEvent::PayoutCreated,
+            AdyenplatformWebhookStatus::Pending => webhooks::IncomingWebhookEvent::PayoutProcessing,
+            AdyenplatformWebhookStatus::Failed => webhooks::IncomingWebhookEvent::PayoutFailure,
+            AdyenplatformWebhookStatus::Returned => webhooks::IncomingWebhookEvent::PayoutReversed,
+        },
     }
 }
-
 #[derive(Debug, Serialize, Deserialize)]
 #[serde(rename_all = "camelCase")]
 pub struct AdyenTransferErrorResponse {
diff --git a/crates/hyperswitch_connectors/src/connectors/ebanx.rs b/crates/hyperswitch_connectors/src/connectors/ebanx.rs
new file mode 100644
index 00000000000..49d5c186426
--- /dev/null
+++ b/crates/hyperswitch_connectors/src/connectors/ebanx.rs
@@ -0,0 +1,451 @@
+pub mod transformers;
+
+use api_models::webhooks::{IncomingWebhookEvent, ObjectReferenceId};
+#[cfg(feature = "payouts")]
+use common_utils::request::RequestContent;
+#[cfg(feature = "payouts")]
+use common_utils::request::{Method, Request, RequestBuilder};
+#[cfg(feature = "payouts")]
+use common_utils::types::{AmountConvertor, FloatMajorUnit, FloatMajorUnitForConnector};
+use common_utils::{errors::CustomResult, ext_traits::BytesExt};
+use error_stack::{report, ResultExt};
+#[cfg(feature = "payouts")]
+use hyperswitch_domain_models::{
+    router_data::RouterData,
+    router_flow_types::{PoCancel, PoCreate, PoEligibility, PoFulfill, PoQuote, PoRecipient},
+    types::{PayoutsData, PayoutsResponseData, PayoutsRouterData},
+};
+use hyperswitch_domain_models::{
+    router_data::{AccessToken, ErrorResponse},
+    router_flow_types::{
+        AccessTokenAuth, Authorize, Capture, Execute, PSync, PaymentMethodToken, RSync, Session,
+        SetupMandate, Void,
+    },
+    router_request_types::{
+        AccessTokenRequestData, PaymentMethodTokenizationData, PaymentsAuthorizeData,
+        PaymentsCancelData, PaymentsCaptureData, PaymentsSessionData, PaymentsSyncData,
+        RefundsData, SetupMandateRequestData,
+    },
+    router_response_types::{PaymentsResponseData, RefundsResponseData},
+};
+#[cfg(feature = "payouts")]
+use hyperswitch_interfaces::types::{PayoutCancelType, PayoutCreateType, PayoutFulfillType};
+use hyperswitch_interfaces::{
+    api::{
+        self, ConnectorCommon, ConnectorCommonExt, ConnectorIntegration, ConnectorSpecifications,
+        ConnectorValidation,
+    },
+    configs::Connectors,
+    errors::ConnectorError,
+    events::connector_api_logs::ConnectorEvent,
+    types::Response,
+    webhooks::{IncomingWebhook, IncomingWebhookRequestDetails},
+};
+#[cfg(feature = "payouts")]
+use masking::Maskable;
+#[cfg(feature = "payouts")]
+use router_env::{instrument, tracing};
+use transformers as ebanx;
+
+#[cfg(feature = "payouts")]
+use crate::{constants::headers, types::ResponseRouterData, utils::convert_amount};
+#[derive(Clone)]
+pub struct Ebanx {
+    #[cfg(feature = "payouts")]
+    amount_converter: &'static (dyn AmountConvertor<Output = FloatMajorUnit> + Sync),
+}
+
+impl Ebanx {
+    pub fn new() -> &'static Self {
+        &Self {
+            #[cfg(feature = "payouts")]
+            amount_converter: &FloatMajorUnitForConnector,
+        }
+    }
+}
+
+impl api::Payment for Ebanx {}
+impl api::PaymentSession for Ebanx {}
+impl api::ConnectorAccessToken for Ebanx {}
+impl api::MandateSetup for Ebanx {}
+impl api::PaymentAuthorize for Ebanx {}
+impl api::PaymentSync for Ebanx {}
+impl api::PaymentCapture for Ebanx {}
+impl api::PaymentVoid for Ebanx {}
+impl api::Refund for Ebanx {}
+impl api::RefundExecute for Ebanx {}
+impl api::RefundSync for Ebanx {}
+impl api::PaymentToken for Ebanx {}
+
+impl api::Payouts for Ebanx {}
+#[cfg(feature = "payouts")]
+impl api::PayoutCancel for Ebanx {}
+#[cfg(feature = "payouts")]
+impl api::PayoutCreate for Ebanx {}
+#[cfg(feature = "payouts")]
+impl api::PayoutEligibility for Ebanx {}
+#[cfg(feature = "payouts")]
+impl api::PayoutQuote for Ebanx {}
+#[cfg(feature = "payouts")]
+impl api::PayoutRecipient for Ebanx {}
+#[cfg(feature = "payouts")]
+impl api::PayoutFulfill for Ebanx {}
+
+impl<Flow, Request, Response> ConnectorCommonExt<Flow, Request, Response> for Ebanx
+where
+    Self: ConnectorIntegration<Flow, Request, Response>,
+{
+    #[cfg(feature = "payouts")]
+    fn build_headers(
+        &self,
+        _req: &RouterData<Flow, Request, Response>,
+        _connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, Maskable<String>)>, ConnectorError> {
+        let header = vec![(
+            headers::CONTENT_TYPE.to_string(),
+            self.common_get_content_type().to_string().into(),
+        )];
+        Ok(header)
+    }
+}
+
+impl ConnectorCommon for Ebanx {
+    fn id(&self) -> &'static str {
+        "ebanx"
+    }
+
+    fn get_currency_unit(&self) -> api::CurrencyUnit {
+        api::CurrencyUnit::Base
+    }
+
+    fn common_get_content_type(&self) -> &'static str {
+        "application/json"
+    }
+
+    fn base_url<'a>(&self, connectors: &'a Connectors) -> &'a str {
+        connectors.ebanx.base_url.as_ref()
+    }
+
+    fn build_error_response(
+        &self,
+        res: Response,
+        event_builder: Option<&mut ConnectorEvent>,
+    ) -> CustomResult<ErrorResponse, ConnectorError> {
+        let response: ebanx::EbanxErrorResponse =
+            res.response
+                .parse_struct("EbanxErrorResponse")
+                .change_context(ConnectorError::ResponseDeserializationFailed)?;
+
+        event_builder.map(|i| i.set_response_body(&response));
+        router_env::logger::info!(connector_response=?response);
+
+        Ok(ErrorResponse {
+            status_code: res.status_code,
+            code: response.status_code,
+            message: response.code,
+            reason: response.message,
+            attempt_status: None,
+            connector_transaction_id: None,
+            network_advice_code: None,
+            network_decline_code: None,
+            network_error_message: None,
+        })
+    }
+}
+
+#[cfg(feature = "payouts")]
+impl ConnectorIntegration<PoCreate, PayoutsData, PayoutsResponseData> for Ebanx {
+    fn get_url(
+        &self,
+        _req: &PayoutsRouterData<PoCreate>,
+        connectors: &Connectors,
+    ) -> CustomResult<String, ConnectorError> {
+        Ok(format!("{}ws/payout/create", connectors.ebanx.base_url))
+    }
+
+    fn get_headers(
+        &self,
+        req: &PayoutsRouterData<PoCreate>,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, Maskable<String>)>, ConnectorError> {
+        self.build_headers(req, connectors)
+    }
+
+    fn get_request_body(
+        &self,
+        req: &PayoutsRouterData<PoCreate>,
+        _connectors: &Connectors,
+    ) -> CustomResult<RequestContent, ConnectorError> {
+        let amount = convert_amount(
+            self.amount_converter,
+            req.request.minor_amount,
+            req.request.source_currency,
+        )?;
+        let connector_router_data = ebanx::EbanxRouterData::from((amount, req));
+        let connector_req = ebanx::EbanxPayoutCreateRequest::try_from(&connector_router_data)?;
+        Ok(RequestContent::Json(Box::new(connector_req)))
+    }
+
+    fn build_request(
+        &self,
+        req: &PayoutsRouterData<PoCreate>,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, ConnectorError> {
+        let request = RequestBuilder::new()
+            .method(Method::Post)
+            .url(&PayoutCreateType::get_url(self, req, connectors)?)
+            .attach_default_headers()
+            .headers(PayoutCreateType::get_headers(self, req, connectors)?)
+            .set_body(PayoutCreateType::get_request_body(self, req, connectors)?)
+            .build();
+
+        Ok(Some(request))
+    }
+
+    fn handle_response(
+        &self,
+        data: &PayoutsRouterData<PoCreate>,
+        event_builder: Option<&mut ConnectorEvent>,
+        res: Response,
+    ) -> CustomResult<PayoutsRouterData<PoCreate>, ConnectorError> {
+        let response: ebanx::EbanxPayoutResponse = res
+            .response
+            .parse_struct("EbanxPayoutResponse")
+            .change_context(ConnectorError::ResponseDeserializationFailed)?;
+
+        event_builder.map(|i| i.set_response_body(&response));
+        router_env::logger::info!(connector_response=?response);
+
+        RouterData::try_from(ResponseRouterData {
+            response,
+            data: data.clone(),
+            http_code: res.status_code,
+        })
+    }
+
+    fn get_error_response(
+        &self,
+        res: Response,
+        event_builder: Option<&mut ConnectorEvent>,
+    ) -> CustomResult<ErrorResponse, ConnectorError> {
+        self.build_error_response(res, event_builder)
+    }
+}
+
+#[cfg(feature = "payouts")]
+impl ConnectorIntegration<PoFulfill, PayoutsData, PayoutsResponseData> for Ebanx {
+    fn get_url(
+        &self,
+        _req: &PayoutsRouterData<PoFulfill>,
+        connectors: &Connectors,
+    ) -> CustomResult<String, ConnectorError> {
+        Ok(format!("{}ws/payout/commit", connectors.ebanx.base_url,))
+    }
+
+    fn get_headers(
+        &self,
+        req: &PayoutsRouterData<PoFulfill>,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, Maskable<String>)>, ConnectorError> {
+        self.build_headers(req, connectors)
+    }
+
+    fn get_request_body(
+        &self,
+        req: &PayoutsRouterData<PoFulfill>,
+        _connectors: &Connectors,
+    ) -> CustomResult<RequestContent, ConnectorError> {
+        let amount = convert_amount(
+            self.amount_converter,
+            req.request.minor_amount,
+            req.request.source_currency,
+        )?;
+        let connector_router_data = ebanx::EbanxRouterData::from((amount, req));
+        let connector_req = ebanx::EbanxPayoutFulfillRequest::try_from(&connector_router_data)?;
+        Ok(RequestContent::Json(Box::new(connector_req)))
+    }
+
+    fn build_request(
+        &self,
+        req: &PayoutsRouterData<PoFulfill>,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, ConnectorError> {
+        let request = RequestBuilder::new()
+            .method(Method::Post)
+            .url(&PayoutFulfillType::get_url(self, req, connectors)?)
+            .attach_default_headers()
+            .headers(PayoutFulfillType::get_headers(self, req, connectors)?)
+            .set_body(PayoutFulfillType::get_request_body(self, req, connectors)?)
+            .build();
+
+        Ok(Some(request))
+    }
+
+    #[instrument(skip_all)]
+    fn handle_response(
+        &self,
+        data: &PayoutsRouterData<PoFulfill>,
+        event_builder: Option<&mut ConnectorEvent>,
+        res: Response,
+    ) -> CustomResult<PayoutsRouterData<PoFulfill>, ConnectorError> {
+        let response: ebanx::EbanxFulfillResponse = res
+            .response
+            .parse_struct("EbanxFulfillResponse")
+            .change_context(ConnectorError::ResponseDeserializationFailed)?;
+
+        event_builder.map(|i| i.set_response_body(&response));
+        router_env::logger::info!(connector_response=?response);
+
+        RouterData::try_from(ResponseRouterData {
+            response,
+            data: data.clone(),
+            http_code: res.status_code,
+        })
+    }
+
+    fn get_error_response(
+        &self,
+        res: Response,
+        event_builder: Option<&mut ConnectorEvent>,
+    ) -> CustomResult<ErrorResponse, ConnectorError> {
+        self.build_error_response(res, event_builder)
+    }
+}
+
+#[cfg(feature = "payouts")]
+impl ConnectorIntegration<PoCancel, PayoutsData, PayoutsResponseData> for Ebanx {
+    fn get_url(
+        &self,
+        _req: &PayoutsRouterData<PoCancel>,
+        connectors: &Connectors,
+    ) -> CustomResult<String, ConnectorError> {
+        Ok(format!("{}ws/payout/cancel", connectors.ebanx.base_url,))
+    }
+
+    fn get_headers(
+        &self,
+        req: &PayoutsRouterData<PoCancel>,
+        _connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, Maskable<String>)>, ConnectorError> {
+        self.build_headers(req, _connectors)
+    }
+
+    fn get_request_body(
+        &self,
+        req: &PayoutsRouterData<PoCancel>,
+        _connectors: &Connectors,
+    ) -> CustomResult<RequestContent, ConnectorError> {
+        let connector_req = ebanx::EbanxPayoutCancelRequest::try_from(req)?;
+        Ok(RequestContent::Json(Box::new(connector_req)))
+    }
+
+    fn build_request(
+        &self,
+        req: &PayoutsRouterData<PoCancel>,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, ConnectorError> {
+        let request = RequestBuilder::new()
+            .method(Method::Put)
+            .url(&PayoutCancelType::get_url(self, req, connectors)?)
+            .attach_default_headers()
+            .headers(PayoutCancelType::get_headers(self, req, connectors)?)
+            .set_body(PayoutCancelType::get_request_body(self, req, connectors)?)
+            .build();
+
+        Ok(Some(request))
+    }
+
+    #[instrument(skip_all)]
+    fn handle_response(
+        &self,
+        data: &PayoutsRouterData<PoCancel>,
+        event_builder: Option<&mut ConnectorEvent>,
+        res: Response,
+    ) -> CustomResult<PayoutsRouterData<PoCancel>, ConnectorError> {
+        let response: ebanx::EbanxCancelResponse = res
+            .response
+            .parse_struct("EbanxCancelResponse")
+            .change_context(ConnectorError::ResponseDeserializationFailed)?;
+
+        event_builder.map(|i| i.set_response_body(&response));
+        router_env::logger::info!(connector_response=?response);
+
+        RouterData::try_from(ResponseRouterData {
+            response,
+            data: data.clone(),
+            http_code: res.status_code,
+        })
+    }
+
+    fn get_error_response(
+        &self,
+        res: Response,
+        event_builder: Option<&mut ConnectorEvent>,
+    ) -> CustomResult<ErrorResponse, ConnectorError> {
+        self.build_error_response(res, event_builder)
+    }
+}
+
+#[cfg(feature = "payouts")]
+impl ConnectorIntegration<PoQuote, PayoutsData, PayoutsResponseData> for Ebanx {}
+
+#[cfg(feature = "payouts")]
+impl ConnectorIntegration<PoRecipient, PayoutsData, PayoutsResponseData> for Ebanx {}
+
+#[cfg(feature = "payouts")]
+impl ConnectorIntegration<PoEligibility, PayoutsData, PayoutsResponseData> for Ebanx {}
+
+impl ConnectorIntegration<PaymentMethodToken, PaymentMethodTokenizationData, PaymentsResponseData>
+    for Ebanx
+{
+    // Not Implemented (R)
+}
+
+impl ConnectorValidation for Ebanx {
+    //TODO: implement functions when support enabled
+}
+
+impl ConnectorIntegration<Session, PaymentsSessionData, PaymentsResponseData> for Ebanx {
+    //TODO: implement sessions flow
+}
+
+impl ConnectorIntegration<AccessTokenAuth, AccessTokenRequestData, AccessToken> for Ebanx {}
+
+impl ConnectorIntegration<SetupMandate, SetupMandateRequestData, PaymentsResponseData> for Ebanx {}
+
+impl ConnectorIntegration<Authorize, PaymentsAuthorizeData, PaymentsResponseData> for Ebanx {}
+
+impl ConnectorIntegration<PSync, PaymentsSyncData, PaymentsResponseData> for Ebanx {}
+
+impl ConnectorIntegration<Capture, PaymentsCaptureData, PaymentsResponseData> for Ebanx {}
+
+impl ConnectorIntegration<Void, PaymentsCancelData, PaymentsResponseData> for Ebanx {}
+
+impl ConnectorIntegration<Execute, RefundsData, RefundsResponseData> for Ebanx {}
+
+impl ConnectorIntegration<RSync, RefundsData, RefundsResponseData> for Ebanx {}
+
+impl IncomingWebhook for Ebanx {
+    fn get_webhook_object_reference_id(
+        &self,
+        _request: &IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<ObjectReferenceId, ConnectorError> {
+        Err(report!(ConnectorError::WebhooksNotImplemented))
+    }
+
+    fn get_webhook_event_type(
+        &self,
+        _request: &IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<IncomingWebhookEvent, ConnectorError> {
+        Err(report!(ConnectorError::WebhooksNotImplemented))
+    }
+
+    fn get_webhook_resource_object(
+        &self,
+        _request: &IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<Box<dyn masking::ErasedMaskSerialize>, ConnectorError> {
+        Err(report!(ConnectorError::WebhooksNotImplemented))
+    }
+}
+
+impl ConnectorSpecifications for Ebanx {}
diff --git a/crates/router/src/connector/ebanx/transformers.rs b/crates/hyperswitch_connectors/src/connectors/ebanx/transformers.rs
similarity index 72%
rename from crates/router/src/connector/ebanx/transformers.rs
rename to crates/hyperswitch_connectors/src/connectors/ebanx/transformers.rs
index f5f096b7307..82e37912560 100644
--- a/crates/router/src/connector/ebanx/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/ebanx/transformers.rs
@@ -3,20 +3,27 @@ use api_models::enums::Currency;
 #[cfg(feature = "payouts")]
 use api_models::payouts::{Bank, PayoutMethodData};
 #[cfg(feature = "payouts")]
+use common_enums::{PayoutStatus, PayoutType};
+#[cfg(feature = "payouts")]
 use common_utils::pii::Email;
 use common_utils::types::FloatMajorUnit;
+use hyperswitch_domain_models::router_data::ConnectorAuthType;
+#[cfg(feature = "payouts")]
+use hyperswitch_domain_models::router_flow_types::PoCreate;
+#[cfg(feature = "payouts")]
+use hyperswitch_domain_models::types::{PayoutsResponseData, PayoutsRouterData};
+use hyperswitch_interfaces::errors::ConnectorError;
 #[cfg(feature = "payouts")]
 use masking::ExposeInterface;
 use masking::Secret;
 use serde::{Deserialize, Serialize};
 
 #[cfg(feature = "payouts")]
-use crate::{
-    connector::utils::{AddressDetailsData, RouterData},
-    connector::utils::{CustomerDetails, PayoutsData},
-    types::{api, storage::enums as storage_enums},
+use crate::types::PayoutsResponseRouterData;
+#[cfg(feature = "payouts")]
+use crate::utils::{
+    AddressDetailsData as _, CustomerDetails as _, PayoutsData as _, RouterData as _,
 };
-use crate::{core::errors, types};
 
 pub struct EbanxRouterData<T> {
     pub amount: FloatMajorUnit, // The type of amount that a connector accepts, for example, String, i64, f64, etc.
@@ -90,13 +97,9 @@ pub enum EbanxBankAccountType {
 }
 
 #[cfg(feature = "payouts")]
-impl TryFrom<&EbanxRouterData<&types::PayoutsRouterData<api::PoCreate>>>
-    for EbanxPayoutCreateRequest
-{
-    type Error = error_stack::Report<errors::ConnectorError>;
-    fn try_from(
-        item: &EbanxRouterData<&types::PayoutsRouterData<api::PoCreate>>,
-    ) -> Result<Self, Self::Error> {
+impl TryFrom<&EbanxRouterData<&PayoutsRouterData<PoCreate>>> for EbanxPayoutCreateRequest {
+    type Error = error_stack::Report<ConnectorError>;
+    fn try_from(item: &EbanxRouterData<&PayoutsRouterData<PoCreate>>) -> Result<Self, Self::Error> {
         let ebanx_auth_type = EbanxAuthType::try_from(&item.router_data.connector_auth_type)?;
         match item.router_data.get_payout_method_data()? {
             PayoutMethodData::Bank(Bank::Pix(pix_data)) => {
@@ -137,7 +140,7 @@ impl TryFrom<&EbanxRouterData<&types::PayoutsRouterData<api::PoCreate>>>
                 })
             }
             PayoutMethodData::Card(_) | PayoutMethodData::Bank(_) | PayoutMethodData::Wallet(_) => {
-                Err(errors::ConnectorError::NotSupported {
+                Err(ConnectorError::NotSupported {
                     message: "Payment Method Not Supported".to_string(),
                     connector: "Ebanx",
                 })?
@@ -150,14 +153,14 @@ pub struct EbanxAuthType {
     pub integration_key: Secret<String>,
 }
 
-impl TryFrom<&types::ConnectorAuthType> for EbanxAuthType {
-    type Error = error_stack::Report<errors::ConnectorError>;
-    fn try_from(auth_type: &types::ConnectorAuthType) -> Result<Self, Self::Error> {
+impl TryFrom<&ConnectorAuthType> for EbanxAuthType {
+    type Error = error_stack::Report<ConnectorError>;
+    fn try_from(auth_type: &ConnectorAuthType) -> Result<Self, Self::Error> {
         match auth_type {
-            types::ConnectorAuthType::HeaderKey { api_key } => Ok(Self {
+            ConnectorAuthType::HeaderKey { api_key } => Ok(Self {
                 integration_key: api_key.to_owned(),
             }),
-            _ => Err(errors::ConnectorError::FailedToObtainAuthType.into()),
+            _ => Err(ConnectorError::FailedToObtainAuthType.into()),
         }
     }
 }
@@ -176,7 +179,7 @@ pub enum EbanxPayoutStatus {
 }
 
 #[cfg(feature = "payouts")]
-impl From<EbanxPayoutStatus> for storage_enums::PayoutStatus {
+impl From<EbanxPayoutStatus> for PayoutStatus {
     fn from(item: EbanxPayoutStatus) -> Self {
         match item {
             EbanxPayoutStatus::Succeeded => Self::Success,
@@ -201,18 +204,14 @@ pub struct EbanxPayoutResponseDetails {
 }
 
 #[cfg(feature = "payouts")]
-impl<F> TryFrom<types::PayoutsResponseRouterData<F, EbanxPayoutResponse>>
-    for types::PayoutsRouterData<F>
-{
-    type Error = error_stack::Report<errors::ConnectorError>;
+impl<F> TryFrom<PayoutsResponseRouterData<F, EbanxPayoutResponse>> for PayoutsRouterData<F> {
+    type Error = error_stack::Report<ConnectorError>;
     fn try_from(
-        item: types::PayoutsResponseRouterData<F, EbanxPayoutResponse>,
+        item: PayoutsResponseRouterData<F, EbanxPayoutResponse>,
     ) -> Result<Self, Self::Error> {
         Ok(Self {
-            response: Ok(types::PayoutsResponseData {
-                status: Some(storage_enums::PayoutStatus::from(
-                    item.response.payout.status,
-                )),
+            response: Ok(PayoutsResponseData {
+                status: Some(PayoutStatus::from(item.response.payout.status)),
                 connector_payout_id: Some(item.response.payout.uid),
                 payout_eligible: None,
                 should_add_next_step_to_process_tracker: false,
@@ -232,26 +231,24 @@ pub struct EbanxPayoutFulfillRequest {
 }
 
 #[cfg(feature = "payouts")]
-impl<F> TryFrom<&EbanxRouterData<&types::PayoutsRouterData<F>>> for EbanxPayoutFulfillRequest {
-    type Error = error_stack::Report<errors::ConnectorError>;
-    fn try_from(item: &EbanxRouterData<&types::PayoutsRouterData<F>>) -> Result<Self, Self::Error> {
+impl<F> TryFrom<&EbanxRouterData<&PayoutsRouterData<F>>> for EbanxPayoutFulfillRequest {
+    type Error = error_stack::Report<ConnectorError>;
+    fn try_from(item: &EbanxRouterData<&PayoutsRouterData<F>>) -> Result<Self, Self::Error> {
         let request = item.router_data.request.to_owned();
         let ebanx_auth_type = EbanxAuthType::try_from(&item.router_data.connector_auth_type)?;
         let payout_type = request.get_payout_type()?;
         match payout_type {
-            storage_enums::PayoutType::Bank => Ok(Self {
+            PayoutType::Bank => Ok(Self {
                 integration_key: ebanx_auth_type.integration_key,
                 uid: request
                     .connector_payout_id
                     .to_owned()
-                    .ok_or(errors::ConnectorError::MissingRequiredField { field_name: "uid" })?,
+                    .ok_or(ConnectorError::MissingRequiredField { field_name: "uid" })?,
             }),
-            storage_enums::PayoutType::Card | storage_enums::PayoutType::Wallet => {
-                Err(errors::ConnectorError::NotSupported {
-                    message: "Payout Method Not Supported".to_string(),
-                    connector: "Ebanx",
-                })?
-            }
+            PayoutType::Card | PayoutType::Wallet => Err(ConnectorError::NotSupported {
+                message: "Payout Method Not Supported".to_string(),
+                connector: "Ebanx",
+            })?,
         }
     }
 }
@@ -276,7 +273,7 @@ pub enum EbanxFulfillStatus {
 }
 
 #[cfg(feature = "payouts")]
-impl From<EbanxFulfillStatus> for storage_enums::PayoutStatus {
+impl From<EbanxFulfillStatus> for PayoutStatus {
     fn from(item: EbanxFulfillStatus) -> Self {
         match item {
             EbanxFulfillStatus::Success => Self::Success,
@@ -289,16 +286,14 @@ impl From<EbanxFulfillStatus> for storage_enums::PayoutStatus {
 }
 
 #[cfg(feature = "payouts")]
-impl<F> TryFrom<types::PayoutsResponseRouterData<F, EbanxFulfillResponse>>
-    for types::PayoutsRouterData<F>
-{
-    type Error = error_stack::Report<errors::ConnectorError>;
+impl<F> TryFrom<PayoutsResponseRouterData<F, EbanxFulfillResponse>> for PayoutsRouterData<F> {
+    type Error = error_stack::Report<ConnectorError>;
     fn try_from(
-        item: types::PayoutsResponseRouterData<F, EbanxFulfillResponse>,
+        item: PayoutsResponseRouterData<F, EbanxFulfillResponse>,
     ) -> Result<Self, Self::Error> {
         Ok(Self {
-            response: Ok(types::PayoutsResponseData {
-                status: Some(storage_enums::PayoutStatus::from(item.response.status)),
+            response: Ok(PayoutsResponseData {
+                status: Some(PayoutStatus::from(item.response.status)),
                 connector_payout_id: Some(item.data.request.get_transfer_id()?),
                 payout_eligible: None,
                 should_add_next_step_to_process_tracker: false,
@@ -325,26 +320,24 @@ pub struct EbanxPayoutCancelRequest {
 }
 
 #[cfg(feature = "payouts")]
-impl<F> TryFrom<&types::PayoutsRouterData<F>> for EbanxPayoutCancelRequest {
-    type Error = error_stack::Report<errors::ConnectorError>;
-    fn try_from(item: &types::PayoutsRouterData<F>) -> Result<Self, Self::Error> {
+impl<F> TryFrom<&PayoutsRouterData<F>> for EbanxPayoutCancelRequest {
+    type Error = error_stack::Report<ConnectorError>;
+    fn try_from(item: &PayoutsRouterData<F>) -> Result<Self, Self::Error> {
         let request = item.request.to_owned();
         let ebanx_auth_type = EbanxAuthType::try_from(&item.connector_auth_type)?;
         let payout_type = request.get_payout_type()?;
         match payout_type {
-            storage_enums::PayoutType::Bank => Ok(Self {
+            PayoutType::Bank => Ok(Self {
                 integration_key: ebanx_auth_type.integration_key,
                 uid: request
                     .connector_payout_id
                     .to_owned()
-                    .ok_or(errors::ConnectorError::MissingRequiredField { field_name: "uid" })?,
+                    .ok_or(ConnectorError::MissingRequiredField { field_name: "uid" })?,
             }),
-            storage_enums::PayoutType::Card | storage_enums::PayoutType::Wallet => {
-                Err(errors::ConnectorError::NotSupported {
-                    message: "Payout Method Not Supported".to_string(),
-                    connector: "Ebanx",
-                })?
-            }
+            PayoutType::Card | PayoutType::Wallet => Err(ConnectorError::NotSupported {
+                message: "Payout Method Not Supported".to_string(),
+                connector: "Ebanx",
+            })?,
         }
     }
 }
@@ -369,7 +362,7 @@ pub enum EbanxCancelStatus {
 }
 
 #[cfg(feature = "payouts")]
-impl From<EbanxCancelStatus> for storage_enums::PayoutStatus {
+impl From<EbanxCancelStatus> for PayoutStatus {
     fn from(item: EbanxCancelStatus) -> Self {
         match item {
             EbanxCancelStatus::Success => Self::Cancelled,
@@ -382,16 +375,14 @@ impl From<EbanxCancelStatus> for storage_enums::PayoutStatus {
 }
 
 #[cfg(feature = "payouts")]
-impl<F> TryFrom<types::PayoutsResponseRouterData<F, EbanxCancelResponse>>
-    for types::PayoutsRouterData<F>
-{
-    type Error = error_stack::Report<errors::ConnectorError>;
+impl<F> TryFrom<PayoutsResponseRouterData<F, EbanxCancelResponse>> for PayoutsRouterData<F> {
+    type Error = error_stack::Report<ConnectorError>;
     fn try_from(
-        item: types::PayoutsResponseRouterData<F, EbanxCancelResponse>,
+        item: PayoutsResponseRouterData<F, EbanxCancelResponse>,
     ) -> Result<Self, Self::Error> {
         Ok(Self {
-            response: Ok(types::PayoutsResponseData {
-                status: Some(storage_enums::PayoutStatus::from(item.response.status)),
+            response: Ok(PayoutsResponseData {
+                status: Some(PayoutStatus::from(item.response.status)),
                 connector_payout_id: item.data.request.connector_payout_id.clone(),
                 payout_eligible: None,
                 should_add_next_step_to_process_tracker: false,
diff --git a/crates/hyperswitch_connectors/src/connectors/gpayments.rs b/crates/hyperswitch_connectors/src/connectors/gpayments.rs
new file mode 100644
index 00000000000..85778efd5f6
--- /dev/null
+++ b/crates/hyperswitch_connectors/src/connectors/gpayments.rs
@@ -0,0 +1,590 @@
+pub mod gpayments_types;
+pub mod transformers;
+
+use api_models::webhooks::{IncomingWebhookEvent, ObjectReferenceId};
+use common_utils::{
+    errors::CustomResult,
+    ext_traits::ByteSliceExt,
+    request::{Method, Request, RequestBuilder, RequestContent},
+    types::{AmountConvertor, MinorUnit, MinorUnitForConnector},
+};
+use error_stack::{report, ResultExt};
+use gpayments_types::GpaymentsConnectorMetaData;
+use hyperswitch_domain_models::{
+    router_data::{AccessToken, ConnectorAuthType, ErrorResponse, RouterData},
+    router_flow_types::{
+        authentication::{
+            Authentication, PostAuthentication, PreAuthentication, PreAuthenticationVersionCall,
+        },
+        AccessTokenAuth, Authorize, Capture, Execute, PSync, PaymentMethodToken, RSync, Session,
+        SetupMandate, Void,
+    },
+    router_request_types::{
+        authentication::{
+            ConnectorAuthenticationRequestData, ConnectorPostAuthenticationRequestData,
+            PreAuthNRequestData,
+        },
+        AccessTokenRequestData, PaymentMethodTokenizationData, PaymentsAuthorizeData,
+        PaymentsCancelData, PaymentsCaptureData, PaymentsSessionData, PaymentsSyncData,
+        RefundsData, SetupMandateRequestData,
+    },
+    router_response_types::{
+        AuthenticationResponseData, PaymentsResponseData, RefundsResponseData,
+    },
+};
+use hyperswitch_interfaces::{
+    api::{
+        self,
+        authentication::{
+            ConnectorAuthentication, ConnectorPostAuthentication, ConnectorPreAuthentication,
+            ConnectorPreAuthenticationVersionCall, ExternalAuthentication,
+        },
+        ConnectorCommon, ConnectorCommonExt, ConnectorIntegration, ConnectorSpecifications,
+        ConnectorValidation,
+    },
+    configs::Connectors,
+    errors::ConnectorError,
+    events::connector_api_logs::ConnectorEvent,
+    types::Response,
+    webhooks::{IncomingWebhook, IncomingWebhookRequestDetails},
+};
+use masking::Maskable;
+use transformers as gpayments;
+
+use crate::{
+    constants::headers,
+    types::{
+        ConnectorAuthenticationRouterData, ConnectorAuthenticationType,
+        ConnectorPostAuthenticationRouterData, ConnectorPostAuthenticationType,
+        ConnectorPreAuthenticationType, ConnectorPreAuthenticationVersionCallType,
+        PreAuthNRouterData, PreAuthNVersionCallRouterData, ResponseRouterData,
+    },
+    utils::to_connector_meta,
+};
+
+#[derive(Clone)]
+pub struct Gpayments {
+    _amount_converter: &'static (dyn AmountConvertor<Output = MinorUnit> + Sync),
+}
+
+impl Gpayments {
+    pub fn new() -> &'static Self {
+        &Self {
+            _amount_converter: &MinorUnitForConnector,
+        }
+    }
+}
+
+impl api::Payment for Gpayments {}
+impl api::PaymentSession for Gpayments {}
+impl api::ConnectorAccessToken for Gpayments {}
+impl api::MandateSetup for Gpayments {}
+impl api::PaymentAuthorize for Gpayments {}
+impl api::PaymentSync for Gpayments {}
+impl api::PaymentCapture for Gpayments {}
+impl api::PaymentVoid for Gpayments {}
+impl api::Refund for Gpayments {}
+impl api::RefundExecute for Gpayments {}
+impl api::RefundSync for Gpayments {}
+impl api::PaymentToken for Gpayments {}
+
+impl ConnectorIntegration<PaymentMethodToken, PaymentMethodTokenizationData, PaymentsResponseData>
+    for Gpayments
+{
+    // Not Implemented (R)
+}
+
+impl<Flow, Request, Response> ConnectorCommonExt<Flow, Request, Response> for Gpayments
+where
+    Self: ConnectorIntegration<Flow, Request, Response>,
+{
+    fn build_headers(
+        &self,
+        _req: &RouterData<Flow, Request, Response>,
+        _connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, Maskable<String>)>, ConnectorError> {
+        let header = vec![(
+            headers::CONTENT_TYPE.to_string(),
+            self.get_content_type().to_string().into(),
+        )];
+        Ok(header)
+    }
+}
+
+impl ConnectorCommon for Gpayments {
+    fn id(&self) -> &'static str {
+        "gpayments"
+    }
+
+    fn get_currency_unit(&self) -> api::CurrencyUnit {
+        api::CurrencyUnit::Minor
+        //    TODO! Check connector documentation, on which unit they are processing the currency.
+        //    If the connector accepts amount in lower unit ( i.e cents for USD) then return api::CurrencyUnit::Minor,
+        //    if connector accepts amount in base unit (i.e dollars for USD) then return api::CurrencyUnit::Base
+    }
+
+    fn common_get_content_type(&self) -> &'static str {
+        "application/json"
+    }
+
+    fn base_url<'a>(&self, connectors: &'a Connectors) -> &'a str {
+        connectors.gpayments.base_url.as_ref()
+    }
+
+    fn get_auth_header(
+        &self,
+        _auth_type: &ConnectorAuthType,
+    ) -> CustomResult<Vec<(String, Maskable<String>)>, ConnectorError> {
+        Ok(vec![])
+    }
+
+    fn build_error_response(
+        &self,
+        res: Response,
+        event_builder: Option<&mut ConnectorEvent>,
+    ) -> CustomResult<ErrorResponse, ConnectorError> {
+        let response: gpayments_types::TDS2ApiError = res
+            .response
+            .parse_struct("gpayments_types TDS2ApiError")
+            .change_context(ConnectorError::ResponseDeserializationFailed)?;
+
+        event_builder.map(|i| i.set_response_body(&response));
+        router_env::logger::info!(connector_response=?response);
+
+        Ok(ErrorResponse {
+            status_code: res.status_code,
+            code: response.error_code,
+            message: response.error_description,
+            reason: response.error_detail,
+            attempt_status: None,
+            connector_transaction_id: None,
+            network_advice_code: None,
+            network_decline_code: None,
+            network_error_message: None,
+        })
+    }
+}
+
+impl ConnectorValidation for Gpayments {
+    //TODO: implement functions when support enabled
+}
+
+impl ConnectorIntegration<Session, PaymentsSessionData, PaymentsResponseData> for Gpayments {}
+
+impl ConnectorIntegration<AccessTokenAuth, AccessTokenRequestData, AccessToken> for Gpayments {}
+
+impl ConnectorIntegration<SetupMandate, SetupMandateRequestData, PaymentsResponseData>
+    for Gpayments
+{
+}
+
+impl ConnectorIntegration<Authorize, PaymentsAuthorizeData, PaymentsResponseData> for Gpayments {}
+
+impl ConnectorIntegration<PSync, PaymentsSyncData, PaymentsResponseData> for Gpayments {}
+
+impl ConnectorIntegration<Capture, PaymentsCaptureData, PaymentsResponseData> for Gpayments {}
+
+impl ConnectorIntegration<Void, PaymentsCancelData, PaymentsResponseData> for Gpayments {}
+
+impl ConnectorIntegration<Execute, RefundsData, RefundsResponseData> for Gpayments {}
+
+impl ConnectorIntegration<RSync, RefundsData, RefundsResponseData> for Gpayments {}
+
+#[async_trait::async_trait]
+impl IncomingWebhook for Gpayments {
+    fn get_webhook_object_reference_id(
+        &self,
+        _request: &IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<ObjectReferenceId, ConnectorError> {
+        Err(report!(ConnectorError::WebhooksNotImplemented))
+    }
+
+    fn get_webhook_event_type(
+        &self,
+        _request: &IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<IncomingWebhookEvent, ConnectorError> {
+        Err(report!(ConnectorError::WebhooksNotImplemented))
+    }
+
+    fn get_webhook_resource_object(
+        &self,
+        _request: &IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<Box<dyn masking::ErasedMaskSerialize>, ConnectorError> {
+        Err(report!(ConnectorError::WebhooksNotImplemented))
+    }
+}
+
+impl ExternalAuthentication for Gpayments {}
+impl ConnectorAuthentication for Gpayments {}
+impl ConnectorPreAuthentication for Gpayments {}
+impl ConnectorPreAuthenticationVersionCall for Gpayments {}
+impl ConnectorPostAuthentication for Gpayments {}
+
+fn build_endpoint(
+    base_url: &str,
+    connector_metadata: &Option<common_utils::pii::SecretSerdeValue>,
+) -> CustomResult<String, ConnectorError> {
+    let metadata = gpayments::GpaymentsMetaData::try_from(connector_metadata)?;
+    let endpoint_prefix = metadata.endpoint_prefix;
+    Ok(base_url.replace("{{merchant_endpoint_prefix}}", &endpoint_prefix))
+}
+
+impl
+    ConnectorIntegration<
+        Authentication,
+        ConnectorAuthenticationRequestData,
+        AuthenticationResponseData,
+    > for Gpayments
+{
+    fn get_headers(
+        &self,
+        req: &ConnectorAuthenticationRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, Maskable<String>)>, ConnectorError> {
+        self.build_headers(req, connectors)
+    }
+
+    fn get_content_type(&self) -> &'static str {
+        self.common_get_content_type()
+    }
+
+    fn get_url(
+        &self,
+        req: &ConnectorAuthenticationRouterData,
+        _connectors: &Connectors,
+    ) -> CustomResult<String, ConnectorError> {
+        let connector_metadata: GpaymentsConnectorMetaData = to_connector_meta(
+            req.request
+                .pre_authentication_data
+                .connector_metadata
+                .clone(),
+        )?;
+        Ok(connector_metadata.authentication_url)
+    }
+
+    fn get_request_body(
+        &self,
+        req: &ConnectorAuthenticationRouterData,
+        _connectors: &Connectors,
+    ) -> CustomResult<RequestContent, ConnectorError> {
+        let connector_router_data = gpayments::GpaymentsRouterData::from((MinorUnit::zero(), req));
+        let req_obj =
+            gpayments_types::GpaymentsAuthenticationRequest::try_from(&connector_router_data)?;
+        Ok(RequestContent::Json(Box::new(req_obj)))
+    }
+    fn build_request(
+        &self,
+        req: &ConnectorAuthenticationRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, ConnectorError> {
+        let gpayments_auth_type = gpayments::GpaymentsAuthType::try_from(&req.connector_auth_type)?;
+        Ok(Some(
+            RequestBuilder::new()
+                .method(Method::Post)
+                .url(&ConnectorAuthenticationType::get_url(
+                    self, req, connectors,
+                )?)
+                .attach_default_headers()
+                .headers(ConnectorAuthenticationType::get_headers(
+                    self, req, connectors,
+                )?)
+                .set_body(ConnectorAuthenticationType::get_request_body(
+                    self, req, connectors,
+                )?)
+                .add_certificate(Some(gpayments_auth_type.certificate))
+                .add_certificate_key(Some(gpayments_auth_type.private_key))
+                .build(),
+        ))
+    }
+
+    fn handle_response(
+        &self,
+        data: &ConnectorAuthenticationRouterData,
+        event_builder: Option<&mut ConnectorEvent>,
+        res: Response,
+    ) -> CustomResult<ConnectorAuthenticationRouterData, ConnectorError> {
+        let response: gpayments_types::GpaymentsAuthenticationSuccessResponse = res
+            .response
+            .parse_struct("gpayments GpaymentsAuthenticationResponse")
+            .change_context(ConnectorError::ResponseDeserializationFailed)?;
+        event_builder.map(|i| i.set_response_body(&response));
+        router_env::logger::info!(connector_response=?response);
+        RouterData::try_from(ResponseRouterData {
+            response,
+            data: data.clone(),
+            http_code: res.status_code,
+        })
+    }
+
+    fn get_error_response(
+        &self,
+        res: Response,
+        event_builder: Option<&mut ConnectorEvent>,
+    ) -> CustomResult<ErrorResponse, ConnectorError> {
+        self.build_error_response(res, event_builder)
+    }
+}
+impl
+    ConnectorIntegration<
+        PostAuthentication,
+        ConnectorPostAuthenticationRequestData,
+        AuthenticationResponseData,
+    > for Gpayments
+{
+    fn get_headers(
+        &self,
+        req: &ConnectorPostAuthenticationRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, Maskable<String>)>, ConnectorError> {
+        self.build_headers(req, connectors)
+    }
+
+    fn get_content_type(&self) -> &'static str {
+        self.common_get_content_type()
+    }
+
+    fn get_url(
+        &self,
+        req: &ConnectorPostAuthenticationRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<String, ConnectorError> {
+        let base_url = build_endpoint(self.base_url(connectors), &req.connector_meta_data)?;
+        Ok(format!(
+            "{}/api/v2/auth/brw/result?threeDSServerTransID={}",
+            base_url, req.request.threeds_server_transaction_id,
+        ))
+    }
+
+    fn build_request(
+        &self,
+        req: &ConnectorPostAuthenticationRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, ConnectorError> {
+        let gpayments_auth_type = gpayments::GpaymentsAuthType::try_from(&req.connector_auth_type)?;
+        Ok(Some(
+            RequestBuilder::new()
+                .method(Method::Get)
+                .url(&ConnectorPostAuthenticationType::get_url(
+                    self, req, connectors,
+                )?)
+                .attach_default_headers()
+                .headers(ConnectorPostAuthenticationType::get_headers(
+                    self, req, connectors,
+                )?)
+                .add_certificate(Some(gpayments_auth_type.certificate))
+                .add_certificate_key(Some(gpayments_auth_type.private_key))
+                .build(),
+        ))
+    }
+
+    fn handle_response(
+        &self,
+        data: &ConnectorPostAuthenticationRouterData,
+        event_builder: Option<&mut ConnectorEvent>,
+        res: Response,
+    ) -> CustomResult<ConnectorPostAuthenticationRouterData, ConnectorError> {
+        let response: gpayments_types::GpaymentsPostAuthenticationResponse = res
+            .response
+            .parse_struct("gpayments PaymentsSyncResponse")
+            .change_context(ConnectorError::ResponseDeserializationFailed)?;
+        event_builder.map(|i| i.set_response_body(&response));
+        router_env::logger::info!(connector_response=?response);
+        Ok(ConnectorPostAuthenticationRouterData {
+            response: Ok(AuthenticationResponseData::PostAuthNResponse {
+                trans_status: response.trans_status.into(),
+                authentication_value: response.authentication_value,
+                eci: response.eci,
+            }),
+            ..data.clone()
+        })
+    }
+
+    fn get_error_response(
+        &self,
+        res: Response,
+        event_builder: Option<&mut ConnectorEvent>,
+    ) -> CustomResult<ErrorResponse, ConnectorError> {
+        self.build_error_response(res, event_builder)
+    }
+}
+
+impl ConnectorIntegration<PreAuthentication, PreAuthNRequestData, AuthenticationResponseData>
+    for Gpayments
+{
+    fn get_headers(
+        &self,
+        req: &PreAuthNRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, Maskable<String>)>, ConnectorError> {
+        self.build_headers(req, connectors)
+    }
+
+    fn get_content_type(&self) -> &'static str {
+        self.common_get_content_type()
+    }
+
+    fn get_url(
+        &self,
+        req: &PreAuthNRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<String, ConnectorError> {
+        let base_url = build_endpoint(self.base_url(connectors), &req.connector_meta_data)?;
+        Ok(format!("{}/api/v2/auth/brw/init?mode=custom", base_url,))
+    }
+
+    fn get_request_body(
+        &self,
+        req: &PreAuthNRouterData,
+        _connectors: &Connectors,
+    ) -> CustomResult<RequestContent, ConnectorError> {
+        let connector_router_data = gpayments::GpaymentsRouterData::from((MinorUnit::zero(), req));
+        let req_obj =
+            gpayments_types::GpaymentsPreAuthenticationRequest::try_from(&connector_router_data)?;
+        Ok(RequestContent::Json(Box::new(req_obj)))
+    }
+
+    fn build_request(
+        &self,
+        req: &PreAuthNRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, ConnectorError> {
+        let gpayments_auth_type = gpayments::GpaymentsAuthType::try_from(&req.connector_auth_type)?;
+        Ok(Some(
+            RequestBuilder::new()
+                .method(Method::Post)
+                .url(&ConnectorPreAuthenticationType::get_url(
+                    self, req, connectors,
+                )?)
+                .attach_default_headers()
+                .headers(ConnectorPreAuthenticationType::get_headers(
+                    self, req, connectors,
+                )?)
+                .set_body(ConnectorPreAuthenticationType::get_request_body(
+                    self, req, connectors,
+                )?)
+                .add_certificate(Some(gpayments_auth_type.certificate))
+                .add_certificate_key(Some(gpayments_auth_type.private_key))
+                .build(),
+        ))
+    }
+
+    fn handle_response(
+        &self,
+        data: &PreAuthNRouterData,
+        event_builder: Option<&mut ConnectorEvent>,
+        res: Response,
+    ) -> CustomResult<PreAuthNRouterData, ConnectorError> {
+        let response: gpayments_types::GpaymentsPreAuthenticationResponse = res
+            .response
+            .parse_struct("gpayments GpaymentsPreAuthenticationResponse")
+            .change_context(ConnectorError::ResponseDeserializationFailed)?;
+        event_builder.map(|i| i.set_response_body(&response));
+        router_env::logger::info!(connector_response=?response);
+        RouterData::try_from(ResponseRouterData {
+            response,
+            data: data.clone(),
+            http_code: res.status_code,
+        })
+    }
+
+    fn get_error_response(
+        &self,
+        res: Response,
+        event_builder: Option<&mut ConnectorEvent>,
+    ) -> CustomResult<ErrorResponse, ConnectorError> {
+        self.build_error_response(res, event_builder)
+    }
+}
+impl
+    ConnectorIntegration<
+        PreAuthenticationVersionCall,
+        PreAuthNRequestData,
+        AuthenticationResponseData,
+    > for Gpayments
+{
+    fn get_headers(
+        &self,
+        req: &PreAuthNVersionCallRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, Maskable<String>)>, ConnectorError> {
+        self.build_headers(req, connectors)
+    }
+
+    fn get_content_type(&self) -> &'static str {
+        self.common_get_content_type()
+    }
+
+    fn get_url(
+        &self,
+        req: &PreAuthNVersionCallRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<String, ConnectorError> {
+        let base_url = build_endpoint(self.base_url(connectors), &req.connector_meta_data)?;
+        Ok(format!("{}/api/v2/auth/enrol", base_url,))
+    }
+
+    fn get_request_body(
+        &self,
+        req: &PreAuthNVersionCallRouterData,
+        _connectors: &Connectors,
+    ) -> CustomResult<RequestContent, ConnectorError> {
+        let connector_router_data = gpayments::GpaymentsRouterData::from((MinorUnit::zero(), req));
+        let req_obj =
+            gpayments_types::GpaymentsPreAuthVersionCallRequest::try_from(&connector_router_data)?;
+        Ok(RequestContent::Json(Box::new(req_obj)))
+    }
+
+    fn build_request(
+        &self,
+        req: &PreAuthNVersionCallRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, ConnectorError> {
+        let gpayments_auth_type = gpayments::GpaymentsAuthType::try_from(&req.connector_auth_type)?;
+        Ok(Some(
+            RequestBuilder::new()
+                .method(Method::Post)
+                .url(&ConnectorPreAuthenticationVersionCallType::get_url(
+                    self, req, connectors,
+                )?)
+                .attach_default_headers()
+                .headers(ConnectorPreAuthenticationVersionCallType::get_headers(
+                    self, req, connectors,
+                )?)
+                .set_body(ConnectorPreAuthenticationVersionCallType::get_request_body(
+                    self, req, connectors,
+                )?)
+                .add_certificate(Some(gpayments_auth_type.certificate))
+                .add_certificate_key(Some(gpayments_auth_type.private_key))
+                .build(),
+        ))
+    }
+
+    fn handle_response(
+        &self,
+        data: &PreAuthNVersionCallRouterData,
+        event_builder: Option<&mut ConnectorEvent>,
+        res: Response,
+    ) -> CustomResult<PreAuthNVersionCallRouterData, ConnectorError> {
+        let response: gpayments_types::GpaymentsPreAuthVersionCallResponse = res
+            .response
+            .parse_struct("gpayments GpaymentsPreAuthVersionCallResponse")
+            .change_context(ConnectorError::ResponseDeserializationFailed)?;
+        event_builder.map(|i| i.set_response_body(&response));
+        router_env::logger::info!(connector_response=?response);
+        RouterData::try_from(ResponseRouterData {
+            response,
+            data: data.clone(),
+            http_code: res.status_code,
+        })
+    }
+
+    fn get_error_response(
+        &self,
+        res: Response,
+        event_builder: Option<&mut ConnectorEvent>,
+    ) -> CustomResult<ErrorResponse, ConnectorError> {
+        self.build_error_response(res, event_builder)
+    }
+}
+
+impl ConnectorSpecifications for Gpayments {}
diff --git a/crates/router/src/connector/gpayments/gpayments_types.rs b/crates/hyperswitch_connectors/src/connectors/gpayments/gpayments_types.rs
similarity index 100%
rename from crates/router/src/connector/gpayments/gpayments_types.rs
rename to crates/hyperswitch_connectors/src/connectors/gpayments/gpayments_types.rs
diff --git a/crates/router/src/connector/gpayments/transformers.rs b/crates/hyperswitch_connectors/src/connectors/gpayments/transformers.rs
similarity index 65%
rename from crates/router/src/connector/gpayments/transformers.rs
rename to crates/hyperswitch_connectors/src/connectors/gpayments/transformers.rs
index 9acb374c8a8..e959218745f 100644
--- a/crates/router/src/connector/gpayments/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/gpayments/transformers.rs
@@ -1,23 +1,36 @@
 use api_models::payments::DeviceChannel;
 use base64::Engine;
-use common_utils::{date_time, types::MinorUnit};
+use common_utils::{consts::BASE64_ENGINE, date_time, types::MinorUnit};
 use error_stack::ResultExt;
+use hyperswitch_domain_models::{
+    router_data::{ConnectorAuthType, ErrorResponse},
+    router_flow_types::authentication::{
+        Authentication, PreAuthentication, PreAuthenticationVersionCall,
+    },
+    router_request_types::{
+        authentication::{
+            AuthNFlowType, ChallengeParams, ConnectorAuthenticationRequestData, MessageCategory,
+            PreAuthNRequestData,
+        },
+        BrowserInformation,
+    },
+    router_response_types::AuthenticationResponseData,
+};
+use hyperswitch_interfaces::errors::ConnectorError;
 use masking::{ExposeInterface, Secret};
 use serde::Deserialize;
 use serde_json::to_string;
 
-use super::gpayments_types;
+use super::gpayments_types::{
+    self, AuthStatus, BrowserInfoCollected, GpaymentsAuthenticationSuccessResponse,
+    GpaymentsPreAuthVersionCallResponse,
+};
 use crate::{
-    connector::{
-        gpayments::gpayments_types::{
-            AuthStatus, BrowserInfoCollected, GpaymentsAuthenticationSuccessResponse,
-        },
-        utils,
-        utils::{get_card_details, CardData},
+    types::{
+        ConnectorAuthenticationRouterData, PreAuthNRouterData, PreAuthNVersionCallRouterData,
+        ResponseRouterData,
     },
-    consts::BASE64_ENGINE,
-    core::errors,
-    types::{self, api, api::MessageCategory, authentication::ChallengeParams},
+    utils::{get_card_details, to_connector_meta_from_secret, CardData as _},
 };
 
 pub struct GpaymentsRouterData<T> {
@@ -42,29 +55,29 @@ pub struct GpaymentsAuthType {
     pub private_key: Secret<String>,
 }
 
-impl TryFrom<&types::ConnectorAuthType> for GpaymentsAuthType {
-    type Error = error_stack::Report<errors::ConnectorError>;
-    fn try_from(auth_type: &types::ConnectorAuthType) -> Result<Self, Self::Error> {
+impl TryFrom<&ConnectorAuthType> for GpaymentsAuthType {
+    type Error = error_stack::Report<ConnectorError>;
+    fn try_from(auth_type: &ConnectorAuthType) -> Result<Self, Self::Error> {
         match auth_type.to_owned() {
-            types::ConnectorAuthType::CertificateAuth {
+            ConnectorAuthType::CertificateAuth {
                 certificate,
                 private_key,
             } => Ok(Self {
                 certificate,
                 private_key,
             }),
-            _ => Err(errors::ConnectorError::FailedToObtainAuthType.into()),
+            _ => Err(ConnectorError::FailedToObtainAuthType.into()),
         }
     }
 }
 
-impl TryFrom<&GpaymentsRouterData<&types::authentication::PreAuthNVersionCallRouterData>>
+impl TryFrom<&GpaymentsRouterData<&PreAuthNVersionCallRouterData>>
     for gpayments_types::GpaymentsPreAuthVersionCallRequest
 {
-    type Error = error_stack::Report<errors::ConnectorError>;
+    type Error = error_stack::Report<ConnectorError>;
 
     fn try_from(
-        value: &GpaymentsRouterData<&types::authentication::PreAuthNVersionCallRouterData>,
+        value: &GpaymentsRouterData<&PreAuthNVersionCallRouterData>,
     ) -> Result<Self, Self::Error> {
         let router_data = value.router_data;
         let metadata = GpaymentsMetaData::try_from(&router_data.connector_meta_data)?;
@@ -82,47 +95,43 @@ pub struct GpaymentsMetaData {
 }
 
 impl TryFrom<&Option<common_utils::pii::SecretSerdeValue>> for GpaymentsMetaData {
-    type Error = error_stack::Report<errors::ConnectorError>;
+    type Error = error_stack::Report<ConnectorError>;
 
     fn try_from(
         meta_data: &Option<common_utils::pii::SecretSerdeValue>,
     ) -> Result<Self, Self::Error> {
-        let metadata: Self = utils::to_connector_meta_from_secret::<Self>(meta_data.clone())
-            .change_context(errors::ConnectorError::InvalidConnectorConfig {
-                config: "metadata",
-            })?;
+        let metadata: Self = to_connector_meta_from_secret::<Self>(meta_data.clone())
+            .change_context(ConnectorError::InvalidConnectorConfig { config: "metadata" })?;
         Ok(metadata)
     }
 }
 
 impl
     TryFrom<
-        types::ResponseRouterData<
-            api::PreAuthenticationVersionCall,
-            gpayments_types::GpaymentsPreAuthVersionCallResponse,
-            types::authentication::PreAuthNRequestData,
-            types::authentication::AuthenticationResponseData,
+        ResponseRouterData<
+            PreAuthenticationVersionCall,
+            GpaymentsPreAuthVersionCallResponse,
+            PreAuthNRequestData,
+            AuthenticationResponseData,
         >,
-    > for types::authentication::PreAuthNVersionCallRouterData
+    > for PreAuthNVersionCallRouterData
 {
-    type Error = error_stack::Report<errors::ConnectorError>;
+    type Error = error_stack::Report<ConnectorError>;
     fn try_from(
-        item: types::ResponseRouterData<
-            api::PreAuthenticationVersionCall,
-            gpayments_types::GpaymentsPreAuthVersionCallResponse,
-            types::authentication::PreAuthNRequestData,
-            types::authentication::AuthenticationResponseData,
+        item: ResponseRouterData<
+            PreAuthenticationVersionCall,
+            GpaymentsPreAuthVersionCallResponse,
+            PreAuthNRequestData,
+            AuthenticationResponseData,
         >,
     ) -> Result<Self, Self::Error> {
         let version_response = item.response;
-        let response = Ok(
-            types::authentication::AuthenticationResponseData::PreAuthVersionCallResponse {
-                maximum_supported_3ds_version: version_response
-                    .supported_message_versions
-                    .and_then(|supported_version| supported_version.iter().max().cloned()) // if no version is returned for the card number, then
-                    .unwrap_or(common_utils::types::SemanticVersion::new(0, 0, 0)),
-            },
-        );
+        let response = Ok(AuthenticationResponseData::PreAuthVersionCallResponse {
+            maximum_supported_3ds_version: version_response
+                .supported_message_versions
+                .and_then(|supported_version| supported_version.iter().max().cloned()) // if no version is returned for the card number, then
+                .unwrap_or(common_utils::types::SemanticVersion::new(0, 0, 0)),
+        });
         Ok(Self {
             response,
             ..item.data.clone()
@@ -130,14 +139,12 @@ impl
     }
 }
 
-impl TryFrom<&GpaymentsRouterData<&types::authentication::PreAuthNRouterData>>
+impl TryFrom<&GpaymentsRouterData<&PreAuthNRouterData>>
     for gpayments_types::GpaymentsPreAuthenticationRequest
 {
-    type Error = error_stack::Report<errors::ConnectorError>;
+    type Error = error_stack::Report<ConnectorError>;
 
-    fn try_from(
-        value: &GpaymentsRouterData<&types::authentication::PreAuthNRouterData>,
-    ) -> Result<Self, Self::Error> {
+    fn try_from(value: &GpaymentsRouterData<&PreAuthNRouterData>) -> Result<Self, Self::Error> {
         let router_data = value.router_data;
         let metadata = GpaymentsMetaData::try_from(&router_data.connector_meta_data)?;
         Ok(Self {
@@ -154,20 +161,20 @@ impl TryFrom<&GpaymentsRouterData<&types::authentication::PreAuthNRouterData>>
     }
 }
 
-impl TryFrom<&GpaymentsRouterData<&types::authentication::ConnectorAuthenticationRouterData>>
+impl TryFrom<&GpaymentsRouterData<&ConnectorAuthenticationRouterData>>
     for gpayments_types::GpaymentsAuthenticationRequest
 {
-    type Error = error_stack::Report<errors::ConnectorError>;
+    type Error = error_stack::Report<ConnectorError>;
 
     fn try_from(
-        item: &GpaymentsRouterData<&types::authentication::ConnectorAuthenticationRouterData>,
+        item: &GpaymentsRouterData<&ConnectorAuthenticationRouterData>,
     ) -> Result<Self, Self::Error> {
         let request = &item.router_data.request;
         let browser_details = match request.browser_details.clone() {
-            Some(details) => Ok::<Option<types::BrowserInformation>, Self::Error>(Some(details)),
+            Some(details) => Ok::<Option<BrowserInformation>, Self::Error>(Some(details)),
             None => {
                 if request.device_channel == DeviceChannel::Browser {
-                    Err(errors::ConnectorError::MissingRequiredField {
+                    Err(ConnectorError::MissingRequiredField {
                         field_name: "browser_info",
                     })?
                 } else {
@@ -191,7 +198,7 @@ impl TryFrom<&GpaymentsRouterData<&types::authentication::ConnectorAuthenticatio
             notification_url: request
                 .return_url
                 .clone()
-                .ok_or(errors::ConnectorError::RequestEncodingFailed)
+                .ok_or(ConnectorError::RequestEncodingFailed)
                 .attach_printable("missing return_url")?,
             three_ds_comp_ind: request.threeds_method_comp_ind.clone(),
             purchase_amount: item.amount.to_string(),
@@ -238,21 +245,21 @@ impl TryFrom<&GpaymentsRouterData<&types::authentication::ConnectorAuthenticatio
 }
 impl
     TryFrom<
-        types::ResponseRouterData<
-            api::Authentication,
+        ResponseRouterData<
+            Authentication,
             GpaymentsAuthenticationSuccessResponse,
-            types::authentication::ConnectorAuthenticationRequestData,
-            types::authentication::AuthenticationResponseData,
+            ConnectorAuthenticationRequestData,
+            AuthenticationResponseData,
         >,
-    > for types::authentication::ConnectorAuthenticationRouterData
+    > for ConnectorAuthenticationRouterData
 {
-    type Error = error_stack::Report<errors::ConnectorError>;
+    type Error = error_stack::Report<ConnectorError>;
     fn try_from(
-        item: types::ResponseRouterData<
-            api::Authentication,
+        item: ResponseRouterData<
+            Authentication,
             GpaymentsAuthenticationSuccessResponse,
-            types::authentication::ConnectorAuthenticationRequestData,
-            types::authentication::AuthenticationResponseData,
+            ConnectorAuthenticationRequestData,
+            AuthenticationResponseData,
         >,
     ) -> Result<Self, Self::Error> {
         let response_auth = item.response;
@@ -264,19 +271,16 @@ impl
             "challengeWindowSize": "01",
         });
         let creq_str = to_string(&creq)
-            .change_context(errors::ConnectorError::ResponseDeserializationFailed)
+            .change_context(ConnectorError::ResponseDeserializationFailed)
             .attach_printable("error while constructing creq_str")?;
         let creq_base64 = Engine::encode(&BASE64_ENGINE, creq_str)
             .trim_end_matches('=')
             .to_owned();
-        let response: Result<
-            types::authentication::AuthenticationResponseData,
-            types::ErrorResponse,
-        > = Ok(
-            types::authentication::AuthenticationResponseData::AuthNResponse {
+        let response: Result<AuthenticationResponseData, ErrorResponse> =
+            Ok(AuthenticationResponseData::AuthNResponse {
                 trans_status: response_auth.trans_status.clone().into(),
                 authn_flow_type: if response_auth.trans_status == AuthStatus::C {
-                    types::authentication::AuthNFlowType::Challenge(Box::new(ChallengeParams {
+                    AuthNFlowType::Challenge(Box::new(ChallengeParams {
                         acs_url: response_auth.acs_url,
                         challenge_request: Some(creq_base64),
                         acs_reference_number: Some(response_auth.acs_reference_number.clone()),
@@ -285,13 +289,12 @@ impl
                         acs_signed_content: None,
                     }))
                 } else {
-                    types::authentication::AuthNFlowType::Frictionless
+                    AuthNFlowType::Frictionless
                 },
                 authentication_value: response_auth.authentication_value,
                 ds_trans_id: Some(response_auth.ds_trans_id),
                 connector_metadata: None,
-            },
-        );
+            });
         Ok(Self {
             response,
             ..item.data.clone()
@@ -301,21 +304,21 @@ impl
 
 impl
     TryFrom<
-        types::ResponseRouterData<
-            api::PreAuthentication,
+        ResponseRouterData<
+            PreAuthentication,
             gpayments_types::GpaymentsPreAuthenticationResponse,
-            types::authentication::PreAuthNRequestData,
-            types::authentication::AuthenticationResponseData,
+            PreAuthNRequestData,
+            AuthenticationResponseData,
         >,
-    > for types::authentication::PreAuthNRouterData
+    > for PreAuthNRouterData
 {
-    type Error = error_stack::Report<errors::ConnectorError>;
+    type Error = error_stack::Report<ConnectorError>;
     fn try_from(
-        item: types::ResponseRouterData<
-            api::PreAuthentication,
+        item: ResponseRouterData<
+            PreAuthentication,
             gpayments_types::GpaymentsPreAuthenticationResponse,
-            types::authentication::PreAuthNRequestData,
-            types::authentication::AuthenticationResponseData,
+            PreAuthNRequestData,
+            AuthenticationResponseData,
         >,
     ) -> Result<Self, Self::Error> {
         let threeds_method_response = item.response;
@@ -328,7 +331,7 @@ impl
                     "threeDSMethodNotificationURL": "https://webhook.site/bd06863d-82c2-42ea-b35b-5ffd5ecece71"
                 });
                 to_string(&three_ds_method_data_json)
-                    .change_context(errors::ConnectorError::ResponseDeserializationFailed)
+                    .change_context(ConnectorError::ResponseDeserializationFailed)
                     .attach_printable("error while constructing three_ds_method_data_str")
                     .map(|three_ds_method_data_string| {
                         Engine::encode(&BASE64_ENGINE, three_ds_method_data_string)
@@ -341,11 +344,8 @@ impl
                 three_ds_requestor_trans_id: None,
             }
         ));
-        let response: Result<
-            types::authentication::AuthenticationResponseData,
-            types::ErrorResponse,
-        > = Ok(
-            types::authentication::AuthenticationResponseData::PreAuthThreeDsMethodCallResponse {
+        let response: Result<AuthenticationResponseData, ErrorResponse> = Ok(
+            AuthenticationResponseData::PreAuthThreeDsMethodCallResponse {
                 threeds_server_transaction_id: threeds_method_response
                     .three_ds_server_trans_id
                     .clone(),
diff --git a/crates/hyperswitch_connectors/src/connectors/netcetera.rs b/crates/hyperswitch_connectors/src/connectors/netcetera.rs
new file mode 100644
index 00000000000..9a5ecdfd8c3
--- /dev/null
+++ b/crates/hyperswitch_connectors/src/connectors/netcetera.rs
@@ -0,0 +1,452 @@
+pub mod netcetera_types;
+pub mod transformers;
+
+use std::fmt::Debug;
+
+use api_models::webhooks::{AuthenticationIdType, IncomingWebhookEvent, ObjectReferenceId};
+use common_utils::{
+    errors::CustomResult,
+    ext_traits::ByteSliceExt,
+    request::{Method, Request, RequestBuilder, RequestContent},
+};
+use error_stack::ResultExt;
+use hyperswitch_domain_models::{
+    router_data::{AccessToken, ConnectorAuthType, ErrorResponse, RouterData},
+    router_flow_types::{
+        authentication::{
+            Authentication, PostAuthentication, PreAuthentication, PreAuthenticationVersionCall,
+        },
+        AccessTokenAuth, Authorize, Capture, Execute, PSync, PaymentMethodToken, RSync, Session,
+        SetupMandate, Void,
+    },
+    router_request_types::{
+        authentication::{
+            ConnectorAuthenticationRequestData, ConnectorPostAuthenticationRequestData,
+            PreAuthNRequestData,
+        },
+        AccessTokenRequestData, PaymentMethodTokenizationData, PaymentsAuthorizeData,
+        PaymentsCancelData, PaymentsCaptureData, PaymentsSessionData, PaymentsSyncData,
+        RefundsData, SetupMandateRequestData,
+    },
+    router_response_types::{
+        AuthenticationResponseData, PaymentsResponseData, RefundsResponseData,
+    },
+};
+use hyperswitch_interfaces::{
+    api::{
+        authentication::{
+            ConnectorAuthentication, ConnectorPostAuthentication, ConnectorPreAuthentication,
+            ConnectorPreAuthenticationVersionCall, ExternalAuthentication,
+        },
+        *,
+    },
+    authentication::ExternalAuthenticationPayload,
+    configs::Connectors,
+    errors::ConnectorError,
+    events::connector_api_logs::ConnectorEvent,
+    types::Response,
+    webhooks::{IncomingWebhook, IncomingWebhookRequestDetails},
+};
+use masking::Maskable;
+use transformers as netcetera;
+
+use crate::{
+    constants::headers,
+    types::{
+        ConnectorAuthenticationRouterData, ConnectorAuthenticationType,
+        ConnectorPreAuthenticationType, PreAuthNRouterData, ResponseRouterData,
+    },
+};
+
+#[derive(Debug, Clone)]
+pub struct Netcetera;
+
+impl Payment for Netcetera {}
+impl PaymentSession for Netcetera {}
+impl ConnectorAccessToken for Netcetera {}
+impl MandateSetup for Netcetera {}
+impl PaymentAuthorize for Netcetera {}
+impl PaymentSync for Netcetera {}
+impl PaymentCapture for Netcetera {}
+impl PaymentVoid for Netcetera {}
+impl Refund for Netcetera {}
+impl RefundExecute for Netcetera {}
+impl RefundSync for Netcetera {}
+impl PaymentToken for Netcetera {}
+
+impl ConnectorIntegration<PaymentMethodToken, PaymentMethodTokenizationData, PaymentsResponseData>
+    for Netcetera
+{
+    // Not Implemented (R)
+}
+
+impl<Flow, Request, Response> ConnectorCommonExt<Flow, Request, Response> for Netcetera
+where
+    Self: ConnectorIntegration<Flow, Request, Response>,
+{
+    fn build_headers(
+        &self,
+        req: &RouterData<Flow, Request, Response>,
+        _connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, Maskable<String>)>, ConnectorError> {
+        let mut header = vec![(
+            headers::CONTENT_TYPE.to_string(),
+            self.get_content_type().to_string().into(),
+        )];
+        let mut api_key = self.get_auth_header(&req.connector_auth_type)?;
+        header.append(&mut api_key);
+        Ok(header)
+    }
+}
+
+impl ConnectorCommon for Netcetera {
+    fn id(&self) -> &'static str {
+        "netcetera"
+    }
+
+    fn get_currency_unit(&self) -> CurrencyUnit {
+        CurrencyUnit::Minor
+    }
+
+    fn common_get_content_type(&self) -> &'static str {
+        "application/json"
+    }
+
+    fn base_url<'a>(&self, connectors: &'a Connectors) -> &'a str {
+        connectors.netcetera.base_url.as_ref()
+    }
+
+    fn get_auth_header(
+        &self,
+        _auth_type: &ConnectorAuthType,
+    ) -> CustomResult<Vec<(String, Maskable<String>)>, ConnectorError> {
+        Ok(vec![])
+    }
+
+    fn build_error_response(
+        &self,
+        res: Response,
+        event_builder: Option<&mut ConnectorEvent>,
+    ) -> CustomResult<ErrorResponse, ConnectorError> {
+        let response: netcetera::NetceteraErrorResponse = res
+            .response
+            .parse_struct("NetceteraErrorResponse")
+            .change_context(ConnectorError::ResponseDeserializationFailed)?;
+
+        event_builder.map(|i| i.set_response_body(&response));
+        router_env::logger::info!(connector_response=?response);
+
+        Ok(ErrorResponse {
+            status_code: res.status_code,
+            code: response.error_details.error_code,
+            message: response.error_details.error_description,
+            reason: response.error_details.error_detail,
+            attempt_status: None,
+            connector_transaction_id: None,
+            network_advice_code: None,
+            network_decline_code: None,
+            network_error_message: None,
+        })
+    }
+}
+
+impl ConnectorValidation for Netcetera {}
+
+impl ConnectorIntegration<Session, PaymentsSessionData, PaymentsResponseData> for Netcetera {}
+
+impl ConnectorIntegration<AccessTokenAuth, AccessTokenRequestData, AccessToken> for Netcetera {}
+
+impl ConnectorIntegration<SetupMandate, SetupMandateRequestData, PaymentsResponseData>
+    for Netcetera
+{
+}
+
+impl ConnectorIntegration<Authorize, PaymentsAuthorizeData, PaymentsResponseData> for Netcetera {}
+
+impl ConnectorIntegration<PSync, PaymentsSyncData, PaymentsResponseData> for Netcetera {}
+
+impl ConnectorIntegration<Capture, PaymentsCaptureData, PaymentsResponseData> for Netcetera {}
+
+impl ConnectorIntegration<Void, PaymentsCancelData, PaymentsResponseData> for Netcetera {}
+
+impl ConnectorIntegration<Execute, RefundsData, RefundsResponseData> for Netcetera {}
+
+impl ConnectorIntegration<RSync, RefundsData, RefundsResponseData> for Netcetera {}
+
+#[async_trait::async_trait]
+impl IncomingWebhook for Netcetera {
+    fn get_webhook_object_reference_id(
+        &self,
+        request: &IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<ObjectReferenceId, ConnectorError> {
+        let webhook_body: netcetera::ResultsResponseData = request
+            .body
+            .parse_struct("netcetera ResultsResponseData")
+            .change_context(ConnectorError::WebhookBodyDecodingFailed)?;
+        Ok(ObjectReferenceId::ExternalAuthenticationID(
+            AuthenticationIdType::ConnectorAuthenticationId(webhook_body.three_ds_server_trans_id),
+        ))
+    }
+
+    fn get_webhook_event_type(
+        &self,
+        _request: &IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<IncomingWebhookEvent, ConnectorError> {
+        Ok(IncomingWebhookEvent::ExternalAuthenticationARes)
+    }
+
+    fn get_webhook_resource_object(
+        &self,
+        request: &IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<Box<dyn masking::ErasedMaskSerialize>, ConnectorError> {
+        let webhook_body_value: netcetera::ResultsResponseData = request
+            .body
+            .parse_struct("netcetera ResultsResponseDatae")
+            .change_context(ConnectorError::WebhookBodyDecodingFailed)?;
+        Ok(Box::new(webhook_body_value))
+    }
+
+    fn get_external_authentication_details(
+        &self,
+        request: &IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<ExternalAuthenticationPayload, ConnectorError> {
+        let webhook_body: netcetera::ResultsResponseData = request
+            .body
+            .parse_struct("netcetera ResultsResponseData")
+            .change_context(ConnectorError::WebhookBodyDecodingFailed)?;
+        Ok(ExternalAuthenticationPayload {
+            trans_status: webhook_body
+                .trans_status
+                .unwrap_or(common_enums::TransactionStatus::InformationOnly),
+            authentication_value: webhook_body.authentication_value,
+            eci: webhook_body.eci,
+        })
+    }
+}
+
+fn build_endpoint(
+    base_url: &str,
+    connector_metadata: &Option<common_utils::pii::SecretSerdeValue>,
+) -> CustomResult<String, ConnectorError> {
+    let metadata = netcetera::NetceteraMetaData::try_from(connector_metadata)?;
+    let endpoint_prefix = metadata.endpoint_prefix;
+    Ok(base_url.replace("{{merchant_endpoint_prefix}}", &endpoint_prefix))
+}
+
+impl ConnectorPreAuthentication for Netcetera {}
+impl ConnectorPreAuthenticationVersionCall for Netcetera {}
+impl ExternalAuthentication for Netcetera {}
+impl ConnectorAuthentication for Netcetera {}
+impl ConnectorPostAuthentication for Netcetera {}
+
+impl ConnectorIntegration<PreAuthentication, PreAuthNRequestData, AuthenticationResponseData>
+    for Netcetera
+{
+    fn get_headers(
+        &self,
+        req: &PreAuthNRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, Maskable<String>)>, ConnectorError> {
+        self.build_headers(req, connectors)
+    }
+
+    fn get_content_type(&self) -> &'static str {
+        self.common_get_content_type()
+    }
+
+    fn get_url(
+        &self,
+        req: &PreAuthNRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<String, ConnectorError> {
+        let base_url = build_endpoint(self.base_url(connectors), &req.connector_meta_data)?;
+        Ok(format!("{}/3ds/versioning", base_url,))
+    }
+
+    fn get_request_body(
+        &self,
+        req: &PreAuthNRouterData,
+        _connectors: &Connectors,
+    ) -> CustomResult<RequestContent, ConnectorError> {
+        let connector_router_data = netcetera::NetceteraRouterData::try_from((0, req))?;
+        let req_obj =
+            netcetera::NetceteraPreAuthenticationRequest::try_from(&connector_router_data)?;
+        Ok(RequestContent::Json(Box::new(req_obj)))
+    }
+
+    fn build_request(
+        &self,
+        req: &PreAuthNRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, ConnectorError> {
+        let netcetera_auth_type = netcetera::NetceteraAuthType::try_from(&req.connector_auth_type)?;
+        Ok(Some(
+            RequestBuilder::new()
+                .method(Method::Post)
+                .url(&ConnectorPreAuthenticationType::get_url(
+                    self, req, connectors,
+                )?)
+                .attach_default_headers()
+                .headers(ConnectorPreAuthenticationType::get_headers(
+                    self, req, connectors,
+                )?)
+                .set_body(ConnectorPreAuthenticationType::get_request_body(
+                    self, req, connectors,
+                )?)
+                .add_certificate(Some(netcetera_auth_type.certificate))
+                .add_certificate_key(Some(netcetera_auth_type.private_key))
+                .build(),
+        ))
+    }
+
+    fn handle_response(
+        &self,
+        data: &PreAuthNRouterData,
+        event_builder: Option<&mut ConnectorEvent>,
+        res: Response,
+    ) -> CustomResult<PreAuthNRouterData, ConnectorError> {
+        let response: netcetera::NetceteraPreAuthenticationResponse = res
+            .response
+            .parse_struct("netcetera NetceteraPreAuthenticationResponse")
+            .change_context(ConnectorError::ResponseDeserializationFailed)?;
+        event_builder.map(|i| i.set_response_body(&response));
+        router_env::logger::info!(connector_response=?response);
+        RouterData::try_from(ResponseRouterData {
+            response,
+            data: data.clone(),
+            http_code: res.status_code,
+        })
+    }
+
+    fn get_error_response(
+        &self,
+        res: Response,
+        event_builder: Option<&mut ConnectorEvent>,
+    ) -> CustomResult<ErrorResponse, ConnectorError> {
+        self.build_error_response(res, event_builder)
+    }
+}
+
+impl
+    ConnectorIntegration<
+        Authentication,
+        ConnectorAuthenticationRequestData,
+        AuthenticationResponseData,
+    > for Netcetera
+{
+    fn get_headers(
+        &self,
+        req: &ConnectorAuthenticationRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, Maskable<String>)>, ConnectorError> {
+        self.build_headers(req, connectors)
+    }
+
+    fn get_content_type(&self) -> &'static str {
+        self.common_get_content_type()
+    }
+
+    fn get_url(
+        &self,
+        req: &ConnectorAuthenticationRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<String, ConnectorError> {
+        let base_url = build_endpoint(self.base_url(connectors), &req.connector_meta_data)?;
+        Ok(format!("{}/3ds/authentication", base_url,))
+    }
+
+    fn get_request_body(
+        &self,
+        req: &ConnectorAuthenticationRouterData,
+        _connectors: &Connectors,
+    ) -> CustomResult<RequestContent, ConnectorError> {
+        let connector_router_data = netcetera::NetceteraRouterData::try_from((
+            &self.get_currency_unit(),
+            req.request
+                .currency
+                .ok_or(ConnectorError::MissingRequiredField {
+                    field_name: "currency",
+                })?,
+            req.request
+                .amount
+                .ok_or(ConnectorError::MissingRequiredField {
+                    field_name: "amount",
+                })?,
+            req,
+        ))?;
+        let req_obj = netcetera::NetceteraAuthenticationRequest::try_from(&connector_router_data);
+        Ok(RequestContent::Json(Box::new(req_obj?)))
+    }
+
+    fn build_request(
+        &self,
+        req: &ConnectorAuthenticationRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, ConnectorError> {
+        let netcetera_auth_type = netcetera::NetceteraAuthType::try_from(&req.connector_auth_type)?;
+        Ok(Some(
+            RequestBuilder::new()
+                .method(Method::Post)
+                .url(&ConnectorAuthenticationType::get_url(
+                    self, req, connectors,
+                )?)
+                .attach_default_headers()
+                .headers(ConnectorAuthenticationType::get_headers(
+                    self, req, connectors,
+                )?)
+                .set_body(ConnectorAuthenticationType::get_request_body(
+                    self, req, connectors,
+                )?)
+                .add_certificate(Some(netcetera_auth_type.certificate))
+                .add_certificate_key(Some(netcetera_auth_type.private_key))
+                .build(),
+        ))
+    }
+
+    fn handle_response(
+        &self,
+        data: &ConnectorAuthenticationRouterData,
+        event_builder: Option<&mut ConnectorEvent>,
+        res: Response,
+    ) -> CustomResult<ConnectorAuthenticationRouterData, ConnectorError> {
+        let response: netcetera::NetceteraAuthenticationResponse = res
+            .response
+            .parse_struct("NetceteraAuthenticationResponse")
+            .change_context(ConnectorError::ResponseDeserializationFailed)?;
+        event_builder.map(|i| i.set_response_body(&response));
+        router_env::logger::info!(connector_response=?response);
+        RouterData::try_from(ResponseRouterData {
+            response,
+            data: data.clone(),
+            http_code: res.status_code,
+        })
+    }
+
+    fn get_error_response(
+        &self,
+        res: Response,
+        event_builder: Option<&mut ConnectorEvent>,
+    ) -> CustomResult<ErrorResponse, ConnectorError> {
+        self.build_error_response(res, event_builder)
+    }
+}
+
+impl
+    ConnectorIntegration<
+        PostAuthentication,
+        ConnectorPostAuthenticationRequestData,
+        AuthenticationResponseData,
+    > for Netcetera
+{
+}
+
+impl
+    ConnectorIntegration<
+        PreAuthenticationVersionCall,
+        PreAuthNRequestData,
+        AuthenticationResponseData,
+    > for Netcetera
+{
+}
+
+impl ConnectorSpecifications for Netcetera {}
diff --git a/crates/router/src/connector/netcetera/netcetera_types.rs b/crates/hyperswitch_connectors/src/connectors/netcetera/netcetera_types.rs
similarity index 99%
rename from crates/router/src/connector/netcetera/netcetera_types.rs
rename to crates/hyperswitch_connectors/src/connectors/netcetera/netcetera_types.rs
index b79eab200e5..7cd34ec9371 100644
--- a/crates/router/src/connector/netcetera/netcetera_types.rs
+++ b/crates/hyperswitch_connectors/src/connectors/netcetera/netcetera_types.rs
@@ -1,12 +1,15 @@
 use std::collections::HashMap;
 
 use common_utils::{pii::Email, types::SemanticVersion};
-use hyperswitch_connectors::utils::AddressDetailsData;
+use hyperswitch_domain_models::router_request_types::{
+    authentication::MessageCategory, BrowserInformation,
+};
+use hyperswitch_interfaces::errors::ConnectorError;
 use masking::ExposeInterface;
 use serde::{Deserialize, Serialize};
 use unidecode::unidecode;
 
-use crate::{connector::utils::PhoneDetailsData, errors, types::api::MessageCategory};
+use crate::utils::{AddressDetailsData as _, PhoneDetailsData as _};
 
 #[derive(Debug, Deserialize, Serialize, Clone)]
 #[serde(untagged)]
@@ -367,7 +370,7 @@ pub enum SchemeId {
 }
 
 impl TryFrom<common_enums::CardNetwork> for SchemeId {
-    type Error = error_stack::Report<errors::ConnectorError>;
+    type Error = error_stack::Report<ConnectorError>;
     fn try_from(network: common_enums::CardNetwork) -> Result<Self, Self::Error> {
         match network {
             common_enums::CardNetwork::Visa => Ok(Self::Visa),
@@ -377,7 +380,7 @@ impl TryFrom<common_enums::CardNetwork> for SchemeId {
             common_enums::CardNetwork::DinersClub => Ok(Self::Diners),
             common_enums::CardNetwork::CartesBancaires => Ok(Self::CartesBancaires),
             common_enums::CardNetwork::UnionPay => Ok(Self::UnionPay),
-            _ => Err(errors::ConnectorError::RequestEncodingFailedWithReason(
+            _ => Err(ConnectorError::RequestEncodingFailedWithReason(
                 "Invalid card network".to_string(),
             ))?,
         }
@@ -768,7 +771,7 @@ impl
         Option<hyperswitch_domain_models::address::Address>,
     )> for Cardholder
 {
-    type Error = error_stack::Report<errors::ConnectorError>;
+    type Error = error_stack::Report<ConnectorError>;
     fn try_from(
         (billing_address, shipping_address): (
             hyperswitch_domain_models::address::Address,
@@ -880,7 +883,7 @@ pub struct PhoneNumber {
 }
 
 impl TryFrom<hyperswitch_domain_models::address::PhoneDetails> for PhoneNumber {
-    type Error = error_stack::Report<errors::ConnectorError>;
+    type Error = error_stack::Report<ConnectorError>;
     fn try_from(
         value: hyperswitch_domain_models::address::PhoneDetails,
     ) -> Result<Self, Self::Error> {
@@ -1469,8 +1472,8 @@ pub fn get_list_of_accept_languages(accept_language: String) -> Vec<String> {
         .collect()
 }
 
-impl From<crate::types::BrowserInformation> for Browser {
-    fn from(value: crate::types::BrowserInformation) -> Self {
+impl From<BrowserInformation> for Browser {
+    fn from(value: BrowserInformation) -> Self {
         Self {
             browser_accept_header: value.accept_header,
             browser_ip: value
diff --git a/crates/router/src/connector/netcetera/transformers.rs b/crates/hyperswitch_connectors/src/connectors/netcetera/transformers.rs
similarity index 78%
rename from crates/router/src/connector/netcetera/transformers.rs
rename to crates/hyperswitch_connectors/src/connectors/netcetera/transformers.rs
index 8e3fb560ceb..467f92b5fdd 100644
--- a/crates/router/src/connector/netcetera/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/netcetera/transformers.rs
@@ -1,13 +1,22 @@
+use common_enums::enums;
+use common_utils::{ext_traits::OptionExt as _, types::SemanticVersion};
 use error_stack::ResultExt;
+use hyperswitch_domain_models::{
+    router_data::{ConnectorAuthType, ErrorResponse},
+    router_flow_types::authentication::{Authentication, PreAuthentication},
+    router_request_types::authentication::{
+        AuthNFlowType, ChallengeParams, ConnectorAuthenticationRequestData, PreAuthNRequestData,
+    },
+    router_response_types::AuthenticationResponseData,
+};
+use hyperswitch_interfaces::{api::CurrencyUnit, errors::ConnectorError};
 use masking::Secret;
 use serde::{Deserialize, Serialize};
 
 use super::netcetera_types;
 use crate::{
-    connector::utils::{self, CardData},
-    core::errors,
-    types::{self, api},
-    utils::OptionExt,
+    types::{ConnectorAuthenticationRouterData, PreAuthNRouterData, ResponseRouterData},
+    utils::{get_card_details, to_connector_meta_from_secret, CardData as _},
 };
 
 //TODO: Fill the struct with respective fields
@@ -16,17 +25,10 @@ pub struct NetceteraRouterData<T> {
     pub router_data: T,
 }
 
-impl<T> TryFrom<(&api::CurrencyUnit, types::storage::enums::Currency, i64, T)>
-    for NetceteraRouterData<T>
-{
-    type Error = error_stack::Report<errors::ConnectorError>;
+impl<T> TryFrom<(&CurrencyUnit, enums::Currency, i64, T)> for NetceteraRouterData<T> {
+    type Error = error_stack::Report<ConnectorError>;
     fn try_from(
-        (_currency_unit, _currency, amount, item): (
-            &api::CurrencyUnit,
-            types::storage::enums::Currency,
-            i64,
-            T,
-        ),
+        (_currency_unit, _currency, amount, item): (&CurrencyUnit, enums::Currency, i64, T),
     ) -> Result<Self, Self::Error> {
         //Todo :  use utils to convert the amount to the type of amount that a connector accepts
         Ok(Self {
@@ -37,7 +39,7 @@ impl<T> TryFrom<(&api::CurrencyUnit, types::storage::enums::Currency, i64, T)>
 }
 
 impl<T> TryFrom<(i64, T)> for NetceteraRouterData<T> {
-    type Error = error_stack::Report<errors::ConnectorError>;
+    type Error = error_stack::Report<ConnectorError>;
     fn try_from((amount, router_data): (i64, T)) -> Result<Self, Self::Error> {
         Ok(Self {
             amount,
@@ -48,21 +50,21 @@ impl<T> TryFrom<(i64, T)> for NetceteraRouterData<T> {
 
 impl
     TryFrom<
-        types::ResponseRouterData<
-            api::PreAuthentication,
+        ResponseRouterData<
+            PreAuthentication,
             NetceteraPreAuthenticationResponse,
-            types::authentication::PreAuthNRequestData,
-            types::authentication::AuthenticationResponseData,
+            PreAuthNRequestData,
+            AuthenticationResponseData,
         >,
-    > for types::authentication::PreAuthNRouterData
+    > for PreAuthNRouterData
 {
-    type Error = error_stack::Report<errors::ConnectorError>;
+    type Error = error_stack::Report<ConnectorError>;
     fn try_from(
-        item: types::ResponseRouterData<
-            api::PreAuthentication,
+        item: ResponseRouterData<
+            PreAuthentication,
             NetceteraPreAuthenticationResponse,
-            types::authentication::PreAuthNRequestData,
-            types::authentication::AuthenticationResponseData,
+            PreAuthNRequestData,
+            AuthenticationResponseData,
         >,
     ) -> Result<Self, Self::Error> {
         let response = match item.response {
@@ -74,7 +76,7 @@ impl
                     .map(|card_range| card_range.highest_common_supported_version.clone())
                     .unwrap_or_else(|| {
                         // Version "0.0.0" will be less that "2.0.0", hence we will treat this card as not eligible for 3ds authentication
-                        common_utils::types::SemanticVersion::new(0, 0, 0)
+                        SemanticVersion::new(0, 0, 0)
                     });
                 let three_ds_method_data = card_range.as_ref().and_then(|card_range| {
                     card_range
@@ -85,36 +87,32 @@ impl
                 let three_ds_method_url = card_range
                     .as_ref()
                     .and_then(|card_range| card_range.get_three_ds_method_url());
-                Ok(
-                    types::authentication::AuthenticationResponseData::PreAuthNResponse {
-                        threeds_server_transaction_id: pre_authn_response
-                            .three_ds_server_trans_id
-                            .clone(),
-                        maximum_supported_3ds_version: maximum_supported_3ds_version.clone(),
-                        connector_authentication_id: pre_authn_response.three_ds_server_trans_id,
-                        three_ds_method_data,
-                        three_ds_method_url,
-                        message_version: maximum_supported_3ds_version,
-                        connector_metadata: None,
-                        directory_server_id: card_range
-                            .as_ref()
-                            .and_then(|card_range| card_range.directory_server_id.clone()),
-                    },
-                )
-            }
-            NetceteraPreAuthenticationResponse::Failure(error_response) => {
-                Err(types::ErrorResponse {
-                    code: error_response.error_details.error_code,
-                    message: error_response.error_details.error_description,
-                    reason: error_response.error_details.error_detail,
-                    status_code: item.http_code,
-                    attempt_status: None,
-                    connector_transaction_id: None,
-                    network_advice_code: None,
-                    network_decline_code: None,
-                    network_error_message: None,
+                Ok(AuthenticationResponseData::PreAuthNResponse {
+                    threeds_server_transaction_id: pre_authn_response
+                        .three_ds_server_trans_id
+                        .clone(),
+                    maximum_supported_3ds_version: maximum_supported_3ds_version.clone(),
+                    connector_authentication_id: pre_authn_response.three_ds_server_trans_id,
+                    three_ds_method_data,
+                    three_ds_method_url,
+                    message_version: maximum_supported_3ds_version,
+                    connector_metadata: None,
+                    directory_server_id: card_range
+                        .as_ref()
+                        .and_then(|card_range| card_range.directory_server_id.clone()),
                 })
             }
+            NetceteraPreAuthenticationResponse::Failure(error_response) => Err(ErrorResponse {
+                code: error_response.error_details.error_code,
+                message: error_response.error_details.error_description,
+                reason: error_response.error_details.error_detail,
+                status_code: item.http_code,
+                attempt_status: None,
+                connector_transaction_id: None,
+                network_advice_code: None,
+                network_decline_code: None,
+                network_error_message: None,
+            }),
         };
         Ok(Self {
             response,
@@ -125,57 +123,49 @@ impl
 
 impl
     TryFrom<
-        types::ResponseRouterData<
-            api::Authentication,
+        ResponseRouterData<
+            Authentication,
             NetceteraAuthenticationResponse,
-            types::authentication::ConnectorAuthenticationRequestData,
-            types::authentication::AuthenticationResponseData,
+            ConnectorAuthenticationRequestData,
+            AuthenticationResponseData,
         >,
-    > for types::authentication::ConnectorAuthenticationRouterData
+    > for ConnectorAuthenticationRouterData
 {
-    type Error = error_stack::Report<errors::ConnectorError>;
+    type Error = error_stack::Report<ConnectorError>;
     fn try_from(
-        item: types::ResponseRouterData<
-            api::Authentication,
+        item: ResponseRouterData<
+            Authentication,
             NetceteraAuthenticationResponse,
-            types::authentication::ConnectorAuthenticationRequestData,
-            types::authentication::AuthenticationResponseData,
+            ConnectorAuthenticationRequestData,
+            AuthenticationResponseData,
         >,
     ) -> Result<Self, Self::Error> {
         let response = match item.response {
             NetceteraAuthenticationResponse::Success(response) => {
                 let authn_flow_type = match response.acs_challenge_mandated {
                     Some(ACSChallengeMandatedIndicator::Y) => {
-                        types::authentication::AuthNFlowType::Challenge(Box::new(
-                            types::authentication::ChallengeParams {
-                                acs_url: response.authentication_response.acs_url.clone(),
-                                challenge_request: response.encoded_challenge_request,
-                                acs_reference_number: response
-                                    .authentication_response
-                                    .acs_reference_number,
-                                acs_trans_id: response.authentication_response.acs_trans_id,
-                                three_dsserver_trans_id: Some(response.three_ds_server_trans_id),
-                                acs_signed_content: response
-                                    .authentication_response
-                                    .acs_signed_content,
-                            },
-                        ))
-                    }
-                    Some(ACSChallengeMandatedIndicator::N) | None => {
-                        types::authentication::AuthNFlowType::Frictionless
+                        AuthNFlowType::Challenge(Box::new(ChallengeParams {
+                            acs_url: response.authentication_response.acs_url.clone(),
+                            challenge_request: response.encoded_challenge_request,
+                            acs_reference_number: response
+                                .authentication_response
+                                .acs_reference_number,
+                            acs_trans_id: response.authentication_response.acs_trans_id,
+                            three_dsserver_trans_id: Some(response.three_ds_server_trans_id),
+                            acs_signed_content: response.authentication_response.acs_signed_content,
+                        }))
                     }
+                    Some(ACSChallengeMandatedIndicator::N) | None => AuthNFlowType::Frictionless,
                 };
-                Ok(
-                    types::authentication::AuthenticationResponseData::AuthNResponse {
-                        authn_flow_type,
-                        authentication_value: response.authentication_value,
-                        trans_status: response.trans_status,
-                        connector_metadata: None,
-                        ds_trans_id: response.authentication_response.ds_trans_id,
-                    },
-                )
+                Ok(AuthenticationResponseData::AuthNResponse {
+                    authn_flow_type,
+                    authentication_value: response.authentication_value,
+                    trans_status: response.trans_status,
+                    connector_metadata: None,
+                    ds_trans_id: response.authentication_response.ds_trans_id,
+                })
             }
-            NetceteraAuthenticationResponse::Error(error_response) => Err(types::ErrorResponse {
+            NetceteraAuthenticationResponse::Error(error_response) => Err(ErrorResponse {
                 code: error_response.error_details.error_code,
                 message: error_response.error_details.error_description,
                 reason: error_response.error_details.error_detail,
@@ -199,18 +189,18 @@ pub struct NetceteraAuthType {
     pub(super) private_key: Secret<String>,
 }
 
-impl TryFrom<&types::ConnectorAuthType> for NetceteraAuthType {
-    type Error = error_stack::Report<errors::ConnectorError>;
-    fn try_from(auth_type: &types::ConnectorAuthType) -> Result<Self, Self::Error> {
+impl TryFrom<&ConnectorAuthType> for NetceteraAuthType {
+    type Error = error_stack::Report<ConnectorError>;
+    fn try_from(auth_type: &ConnectorAuthType) -> Result<Self, Self::Error> {
         match auth_type.to_owned() {
-            types::ConnectorAuthType::CertificateAuth {
+            ConnectorAuthType::CertificateAuth {
                 certificate,
                 private_key,
             } => Ok(Self {
                 certificate,
                 private_key,
             }),
-            _ => Err(errors::ConnectorError::FailedToObtainAuthType.into()),
+            _ => Err(ConnectorError::FailedToObtainAuthType.into()),
         }
     }
 }
@@ -269,14 +259,12 @@ pub struct NetceteraMetaData {
 }
 
 impl TryFrom<&Option<common_utils::pii::SecretSerdeValue>> for NetceteraMetaData {
-    type Error = error_stack::Report<errors::ConnectorError>;
+    type Error = error_stack::Report<ConnectorError>;
     fn try_from(
         meta_data: &Option<common_utils::pii::SecretSerdeValue>,
     ) -> Result<Self, Self::Error> {
-        let metadata: Self = utils::to_connector_meta_from_secret::<Self>(meta_data.clone())
-            .change_context(errors::ConnectorError::InvalidConnectorConfig {
-                config: "metadata",
-            })?;
+        let metadata: Self = to_connector_meta_from_secret::<Self>(meta_data.clone())
+            .change_context(ConnectorError::InvalidConnectorConfig { config: "metadata" })?;
         Ok(metadata)
     }
 }
@@ -321,7 +309,7 @@ pub struct CardRange {
     pub acs_protocol_versions: Vec<AcsProtocolVersion>,
     #[serde(rename = "threeDSMethodDataForm")]
     pub three_ds_method_data_form: Option<ThreeDSMethodDataForm>,
-    pub highest_common_supported_version: common_utils::types::SemanticVersion,
+    pub highest_common_supported_version: SemanticVersion,
 }
 
 impl CardRange {
@@ -346,19 +334,15 @@ pub struct ThreeDSMethodDataForm {
 #[derive(Debug, Deserialize, Serialize, Clone)]
 #[serde(rename_all = "camelCase")]
 pub struct AcsProtocolVersion {
-    pub version: common_utils::types::SemanticVersion,
+    pub version: SemanticVersion,
     #[serde(rename = "threeDSMethodURL")]
     pub three_ds_method_url: Option<String>,
 }
 
-impl TryFrom<&NetceteraRouterData<&types::authentication::PreAuthNRouterData>>
-    for NetceteraPreAuthenticationRequest
-{
-    type Error = error_stack::Report<errors::ConnectorError>;
+impl TryFrom<&NetceteraRouterData<&PreAuthNRouterData>> for NetceteraPreAuthenticationRequest {
+    type Error = error_stack::Report<ConnectorError>;
 
-    fn try_from(
-        value: &NetceteraRouterData<&types::authentication::PreAuthNRouterData>,
-    ) -> Result<Self, Self::Error> {
+    fn try_from(value: &NetceteraRouterData<&PreAuthNRouterData>) -> Result<Self, Self::Error> {
         let router_data = value.router_data;
         let is_cobadged_card = || {
             router_data
@@ -366,7 +350,7 @@ impl TryFrom<&NetceteraRouterData<&types::authentication::PreAuthNRouterData>>
                 .card
                 .card_number
                 .is_cobadged_card()
-                .change_context(errors::ConnectorError::RequestEncodingFailed)
+                .change_context(ConnectorError::RequestEncodingFailed)
                 .attach_printable("error while checking is_cobadged_card")
         };
         Ok(Self {
@@ -406,7 +390,7 @@ pub struct NetceteraAuthenticationRequest {
     /// - 2.2.0 -> prefer authentication with 2.2.0 version,
     /// - 2.3.1 -> prefer authentication with 2.3.1 version,
     /// - latest -> prefer authentication with the latest version, the 3DS Server is certified for. 2.3.1 at this moment.
-    pub preferred_protocol_version: Option<common_utils::types::SemanticVersion>,
+    pub preferred_protocol_version: Option<SemanticVersion>,
     /// Boolean flag that enforces preferred 3D Secure protocol version to be used in 3D Secure authentication.
     /// The value should be set true to enforce preferred version. If value is false or not provided,
     /// 3DS Server can fall back to next supported 3DS protocol version while initiating 3D Secure authentication.
@@ -460,12 +444,12 @@ pub struct NetceteraAuthenticationRequest {
     pub payee_origin: Option<url::Url>,
 }
 
-impl TryFrom<&NetceteraRouterData<&types::authentication::ConnectorAuthenticationRouterData>>
+impl TryFrom<&NetceteraRouterData<&ConnectorAuthenticationRouterData>>
     for NetceteraAuthenticationRequest
 {
-    type Error = error_stack::Report<errors::ConnectorError>;
+    type Error = error_stack::Report<ConnectorError>;
     fn try_from(
-        item: &NetceteraRouterData<&types::authentication::ConnectorAuthenticationRouterData>,
+        item: &NetceteraRouterData<&ConnectorAuthenticationRouterData>,
     ) -> Result<Self, Self::Error> {
         let now = common_utils::date_time::now();
         let request = item.router_data.request.clone();
@@ -484,12 +468,12 @@ impl TryFrom<&NetceteraRouterData<&types::authentication::ConnectorAuthenticatio
                 .message_version
                 .clone(),
         );
-        let card = utils::get_card_details(request.payment_method_data, "netcetera")?;
+        let card = get_card_details(request.payment_method_data, "netcetera")?;
         let is_cobadged_card = card
             .card_number
             .clone()
             .is_cobadged_card()
-            .change_context(errors::ConnectorError::RequestEncodingFailed)
+            .change_context(ConnectorError::RequestEncodingFailed)
             .attach_printable("error while checking is_cobadged_card")?;
         let cardholder_account = netcetera_types::CardholderAccount {
             acct_type: None,
@@ -511,7 +495,7 @@ impl TryFrom<&NetceteraRouterData<&types::authentication::ConnectorAuthenticatio
         let currency = request
             .currency
             .get_required_value("currency")
-            .change_context(errors::ConnectorError::MissingRequiredField {
+            .change_context(ConnectorError::MissingRequiredField {
                 field_name: "currency",
             })?;
         let purchase = netcetera_types::Purchase {
@@ -526,7 +510,7 @@ impl TryFrom<&NetceteraRouterData<&types::authentication::ConnectorAuthenticatio
                     common_utils::date_time::DateFormat::YYYYMMDDHHmmss,
                 )
                 .change_context(
-                    errors::ConnectorError::RequestEncodingFailedWithReason(
+                    ConnectorError::RequestEncodingFailedWithReason(
                         "Failed to format Date".to_string(),
                     ),
                 )?,
@@ -552,7 +536,7 @@ impl TryFrom<&NetceteraRouterData<&types::authentication::ConnectorAuthenticatio
             .connector_meta_data
             .clone()
             .parse_value("NetceteraMetaData")
-            .change_context(errors::ConnectorError::RequestEncodingFailed)?;
+            .change_context(ConnectorError::RequestEncodingFailed)?;
         let merchant_data = netcetera_types::MerchantData {
             merchant_configuration_id: connector_meta_data.merchant_configuration_id,
             mcc: connector_meta_data.mcc,
diff --git a/crates/hyperswitch_connectors/src/connectors/plaid.rs b/crates/hyperswitch_connectors/src/connectors/plaid.rs
new file mode 100644
index 00000000000..fcd83b380a3
--- /dev/null
+++ b/crates/hyperswitch_connectors/src/connectors/plaid.rs
@@ -0,0 +1,445 @@
+pub mod transformers;
+
+use api_models::webhooks::{IncomingWebhookEvent, ObjectReferenceId};
+use common_utils::{
+    errors::CustomResult,
+    ext_traits::BytesExt,
+    request::{Method, Request, RequestBuilder, RequestContent},
+    types::{AmountConvertor, FloatMajorUnit, FloatMajorUnitForConnector},
+};
+use error_stack::ResultExt;
+use hyperswitch_domain_models::{
+    router_data::{AccessToken, ConnectorAuthType, ErrorResponse, RouterData},
+    router_flow_types::{
+        AccessTokenAuth, Authorize, Capture, Execute, PSync, PaymentMethodToken, PostProcessing,
+        RSync, Session, SetupMandate, Void,
+    },
+    router_request_types::{
+        AccessTokenRequestData, PaymentMethodTokenizationData, PaymentsAuthorizeData,
+        PaymentsCancelData, PaymentsCaptureData, PaymentsPostProcessingData, PaymentsSessionData,
+        PaymentsSyncData, RefundsData, SetupMandateRequestData,
+    },
+    router_response_types::{PaymentsResponseData, RefundsResponseData},
+    types::{PaymentsAuthorizeRouterData, PaymentsSyncRouterData},
+};
+use hyperswitch_interfaces::{
+    api::{
+        ConnectorAccessToken, ConnectorCommon, ConnectorCommonExt, ConnectorIntegration,
+        ConnectorSpecifications, ConnectorValidation, CurrencyUnit, MandateSetup, Payment,
+        PaymentAuthorize, PaymentCapture, PaymentSession, PaymentSync, PaymentToken, PaymentVoid,
+        PaymentsPostProcessing, Refund, RefundExecute, RefundSync,
+    },
+    configs::Connectors,
+    consts::NO_ERROR_CODE,
+    errors::ConnectorError,
+    events::connector_api_logs::ConnectorEvent,
+    types::{PaymentsAuthorizeType, PaymentsPostProcessingType, PaymentsSyncType, Response},
+    webhooks::{IncomingWebhook, IncomingWebhookRequestDetails},
+};
+use masking::{Mask as _, Maskable};
+use transformers as plaid;
+
+use crate::{
+    constants::headers,
+    types::{PaymentsPostProcessingRouterData, ResponseRouterData},
+    utils::convert_amount,
+};
+
+#[derive(Clone)]
+pub struct Plaid {
+    amount_converter: &'static (dyn AmountConvertor<Output = FloatMajorUnit> + Sync),
+}
+
+impl Plaid {
+    pub fn new() -> &'static Self {
+        &Self {
+            amount_converter: &FloatMajorUnitForConnector,
+        }
+    }
+}
+
+impl Payment for Plaid {}
+impl PaymentSession for Plaid {}
+impl ConnectorAccessToken for Plaid {}
+impl MandateSetup for Plaid {}
+impl PaymentAuthorize for Plaid {}
+impl PaymentSync for Plaid {}
+impl PaymentCapture for Plaid {}
+impl PaymentVoid for Plaid {}
+impl Refund for Plaid {}
+impl RefundExecute for Plaid {}
+impl RefundSync for Plaid {}
+impl PaymentToken for Plaid {}
+impl PaymentsPostProcessing for Plaid {}
+
+impl ConnectorIntegration<PaymentMethodToken, PaymentMethodTokenizationData, PaymentsResponseData>
+    for Plaid
+{
+    // Not Implemented (R)
+}
+
+impl<Flow, Request, Response> ConnectorCommonExt<Flow, Request, Response> for Plaid
+where
+    Self: ConnectorIntegration<Flow, Request, Response>,
+{
+    fn build_headers(
+        &self,
+        req: &RouterData<Flow, Request, Response>,
+        _connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, Maskable<String>)>, ConnectorError> {
+        let mut header = vec![(
+            headers::CONTENT_TYPE.to_string(),
+            self.get_content_type().to_string().into(),
+        )];
+        let mut auth = self.get_auth_header(&req.connector_auth_type)?;
+        header.append(&mut auth);
+        Ok(header)
+    }
+}
+
+impl ConnectorCommon for Plaid {
+    fn id(&self) -> &'static str {
+        "plaid"
+    }
+
+    fn get_currency_unit(&self) -> CurrencyUnit {
+        CurrencyUnit::Base
+    }
+
+    fn common_get_content_type(&self) -> &'static str {
+        "application/json"
+    }
+
+    fn base_url<'a>(&self, connectors: &'a Connectors) -> &'a str {
+        connectors.plaid.base_url.as_ref()
+    }
+
+    fn get_auth_header(
+        &self,
+        auth_type: &ConnectorAuthType,
+    ) -> CustomResult<Vec<(String, Maskable<String>)>, ConnectorError> {
+        let auth = plaid::PlaidAuthType::try_from(auth_type)
+            .change_context(ConnectorError::FailedToObtainAuthType)?;
+        let client_id = auth.client_id.into_masked();
+        let secret = auth.secret.into_masked();
+
+        Ok(vec![
+            ("PLAID-CLIENT-ID".to_string(), client_id),
+            ("PLAID-SECRET".to_string(), secret),
+        ])
+    }
+
+    fn build_error_response(
+        &self,
+        res: Response,
+        event_builder: Option<&mut ConnectorEvent>,
+    ) -> CustomResult<ErrorResponse, ConnectorError> {
+        let response: plaid::PlaidErrorResponse =
+            res.response
+                .parse_struct("PlaidErrorResponse")
+                .change_context(ConnectorError::ResponseDeserializationFailed)?;
+
+        event_builder.map(|i| i.set_response_body(&response));
+        router_env::logger::info!(connector_response=?response);
+
+        Ok(ErrorResponse {
+            status_code: res.status_code,
+            code: response.error_code.unwrap_or(NO_ERROR_CODE.to_string()),
+            message: response.error_message,
+            reason: response.display_message,
+            attempt_status: None,
+            connector_transaction_id: None,
+            network_advice_code: None,
+            network_decline_code: None,
+            network_error_message: None,
+        })
+    }
+}
+
+impl ConnectorValidation for Plaid {
+    //TODO: implement functions when support enabled
+}
+
+impl ConnectorIntegration<Session, PaymentsSessionData, PaymentsResponseData> for Plaid {
+    //TODO: implement sessions flow
+}
+
+impl ConnectorIntegration<AccessTokenAuth, AccessTokenRequestData, AccessToken> for Plaid {}
+
+impl ConnectorIntegration<SetupMandate, SetupMandateRequestData, PaymentsResponseData> for Plaid {}
+
+impl ConnectorIntegration<Authorize, PaymentsAuthorizeData, PaymentsResponseData> for Plaid {
+    fn get_headers(
+        &self,
+        req: &PaymentsAuthorizeRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, Maskable<String>)>, ConnectorError> {
+        self.build_headers(req, connectors)
+    }
+
+    fn get_content_type(&self) -> &'static str {
+        self.common_get_content_type()
+    }
+
+    fn get_url(
+        &self,
+        _req: &PaymentsAuthorizeRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<String, ConnectorError> {
+        Ok(format!(
+            "{}/payment_initiation/payment/create",
+            self.base_url(connectors)
+        ))
+    }
+
+    fn get_request_body(
+        &self,
+        req: &PaymentsAuthorizeRouterData,
+        _connectors: &Connectors,
+    ) -> CustomResult<RequestContent, ConnectorError> {
+        let amount = convert_amount(
+            self.amount_converter,
+            req.request.minor_amount,
+            req.request.currency,
+        )?;
+        let connector_router_data = plaid::PlaidRouterData::from((amount, req));
+        let connector_req = plaid::PlaidPaymentsRequest::try_from(&connector_router_data)?;
+        Ok(RequestContent::Json(Box::new(connector_req)))
+    }
+
+    fn build_request(
+        &self,
+        req: &PaymentsAuthorizeRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, ConnectorError> {
+        Ok(Some(
+            RequestBuilder::new()
+                .method(Method::Post)
+                .url(&PaymentsAuthorizeType::get_url(self, req, connectors)?)
+                .attach_default_headers()
+                .headers(PaymentsAuthorizeType::get_headers(self, req, connectors)?)
+                .set_body(PaymentsAuthorizeType::get_request_body(
+                    self, req, connectors,
+                )?)
+                .build(),
+        ))
+    }
+
+    fn handle_response(
+        &self,
+        data: &PaymentsAuthorizeRouterData,
+        event_builder: Option<&mut ConnectorEvent>,
+        res: Response,
+    ) -> CustomResult<PaymentsAuthorizeRouterData, ConnectorError> {
+        let response: plaid::PlaidPaymentsResponse = res
+            .response
+            .parse_struct("PlaidPaymentsResponse")
+            .change_context(ConnectorError::ResponseDeserializationFailed)?;
+        event_builder.map(|i| i.set_response_body(&response));
+        router_env::logger::info!(connector_response=?response);
+        RouterData::try_from(ResponseRouterData {
+            response,
+            data: data.clone(),
+            http_code: res.status_code,
+        })
+    }
+
+    fn get_error_response(
+        &self,
+        res: Response,
+        event_builder: Option<&mut ConnectorEvent>,
+    ) -> CustomResult<ErrorResponse, ConnectorError> {
+        self.build_error_response(res, event_builder)
+    }
+}
+
+impl ConnectorIntegration<PSync, PaymentsSyncData, PaymentsResponseData> for Plaid {
+    fn get_headers(
+        &self,
+        req: &PaymentsSyncRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, Maskable<String>)>, ConnectorError> {
+        self.build_headers(req, connectors)
+    }
+
+    fn get_content_type(&self) -> &'static str {
+        self.common_get_content_type()
+    }
+
+    fn get_request_body(
+        &self,
+        req: &PaymentsSyncRouterData,
+        _connectors: &Connectors,
+    ) -> CustomResult<RequestContent, ConnectorError> {
+        let connector_req = plaid::PlaidSyncRequest::try_from(req)?;
+        Ok(RequestContent::Json(Box::new(connector_req)))
+    }
+
+    fn get_url(
+        &self,
+        _req: &PaymentsSyncRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<String, ConnectorError> {
+        Ok(format!(
+            "{}/payment_initiation/payment/get",
+            self.base_url(connectors)
+        ))
+    }
+
+    fn build_request(
+        &self,
+        req: &PaymentsSyncRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, ConnectorError> {
+        Ok(Some(
+            RequestBuilder::new()
+                .method(Method::Post)
+                .url(&PaymentsSyncType::get_url(self, req, connectors)?)
+                .attach_default_headers()
+                .headers(PaymentsSyncType::get_headers(self, req, connectors)?)
+                .set_body(PaymentsSyncType::get_request_body(self, req, connectors)?)
+                .build(),
+        ))
+    }
+
+    fn handle_response(
+        &self,
+        data: &PaymentsSyncRouterData,
+        event_builder: Option<&mut ConnectorEvent>,
+        res: Response,
+    ) -> CustomResult<PaymentsSyncRouterData, ConnectorError> {
+        let response: plaid::PlaidSyncResponse = res
+            .response
+            .parse_struct("PlaidSyncResponse")
+            .change_context(ConnectorError::ResponseDeserializationFailed)?;
+        event_builder.map(|i| i.set_response_body(&response));
+        router_env::logger::info!(connector_response=?response);
+        RouterData::try_from(ResponseRouterData {
+            response,
+            data: data.clone(),
+            http_code: res.status_code,
+        })
+    }
+
+    fn get_error_response(
+        &self,
+        res: Response,
+        event_builder: Option<&mut ConnectorEvent>,
+    ) -> CustomResult<ErrorResponse, ConnectorError> {
+        self.build_error_response(res, event_builder)
+    }
+}
+
+impl ConnectorIntegration<PostProcessing, PaymentsPostProcessingData, PaymentsResponseData>
+    for Plaid
+{
+    fn get_headers(
+        &self,
+        req: &PaymentsPostProcessingRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, Maskable<String>)>, ConnectorError> {
+        self.build_headers(req, connectors)
+    }
+
+    fn get_content_type(&self) -> &'static str {
+        self.common_get_content_type()
+    }
+
+    fn get_url(
+        &self,
+        _req: &PaymentsPostProcessingRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<String, ConnectorError> {
+        Ok(format!("{}/link/token/create", self.base_url(connectors)))
+    }
+
+    fn get_request_body(
+        &self,
+        req: &PaymentsPostProcessingRouterData,
+        _connectors: &Connectors,
+    ) -> CustomResult<RequestContent, ConnectorError> {
+        let connector_req = plaid::PlaidLinkTokenRequest::try_from(req)?;
+        Ok(RequestContent::Json(Box::new(connector_req)))
+    }
+
+    fn build_request(
+        &self,
+        req: &PaymentsPostProcessingRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, ConnectorError> {
+        Ok(Some(
+            RequestBuilder::new()
+                .method(Method::Post)
+                .url(&PaymentsPostProcessingType::get_url(self, req, connectors)?)
+                .attach_default_headers()
+                .headers(PaymentsPostProcessingType::get_headers(
+                    self, req, connectors,
+                )?)
+                .set_body(PaymentsPostProcessingType::get_request_body(
+                    self, req, connectors,
+                )?)
+                .build(),
+        ))
+    }
+
+    fn handle_response(
+        &self,
+        data: &PaymentsPostProcessingRouterData,
+        event_builder: Option<&mut ConnectorEvent>,
+        res: Response,
+    ) -> CustomResult<PaymentsPostProcessingRouterData, ConnectorError> {
+        let response: plaid::PlaidLinkTokenResponse = res
+            .response
+            .parse_struct("PlaidLinkTokenResponse")
+            .change_context(ConnectorError::ResponseDeserializationFailed)?;
+        event_builder.map(|i| i.set_response_body(&response));
+        router_env::logger::info!(connector_response=?response);
+        RouterData::try_from(ResponseRouterData {
+            response,
+            data: data.clone(),
+            http_code: res.status_code,
+        })
+    }
+
+    fn get_error_response(
+        &self,
+        res: Response,
+        event_builder: Option<&mut ConnectorEvent>,
+    ) -> CustomResult<ErrorResponse, ConnectorError> {
+        self.build_error_response(res, event_builder)
+    }
+}
+
+impl ConnectorIntegration<Capture, PaymentsCaptureData, PaymentsResponseData> for Plaid {}
+
+impl ConnectorIntegration<Void, PaymentsCancelData, PaymentsResponseData> for Plaid {}
+
+impl ConnectorIntegration<Execute, RefundsData, RefundsResponseData> for Plaid {}
+
+impl ConnectorIntegration<RSync, RefundsData, RefundsResponseData> for Plaid {}
+
+#[async_trait::async_trait]
+impl IncomingWebhook for Plaid {
+    fn get_webhook_object_reference_id(
+        &self,
+        _request: &IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<ObjectReferenceId, ConnectorError> {
+        Err((ConnectorError::WebhooksNotImplemented).into())
+    }
+
+    fn get_webhook_event_type(
+        &self,
+        _request: &IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<IncomingWebhookEvent, ConnectorError> {
+        Err((ConnectorError::WebhooksNotImplemented).into())
+    }
+
+    fn get_webhook_resource_object(
+        &self,
+        _request: &IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<Box<dyn masking::ErasedMaskSerialize>, ConnectorError> {
+        Err((ConnectorError::WebhooksNotImplemented).into())
+    }
+}
+
+impl ConnectorSpecifications for Plaid {}
diff --git a/crates/router/src/connector/plaid/transformers.rs b/crates/hyperswitch_connectors/src/connectors/plaid/transformers.rs
similarity index 74%
rename from crates/router/src/connector/plaid/transformers.rs
rename to crates/hyperswitch_connectors/src/connectors/plaid/transformers.rs
index da4bc82fca3..40ea49668ab 100644
--- a/crates/router/src/connector/plaid/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/plaid/transformers.rs
@@ -1,12 +1,20 @@
-use common_enums::Currency;
+use api_models::payments::OpenBankingSessionToken;
+use common_enums::{AttemptStatus, Currency};
 use common_utils::types::FloatMajorUnit;
+use hyperswitch_domain_models::{
+    payment_method_data::{OpenBankingData, PaymentMethodData},
+    router_data::{ConnectorAuthType, ErrorResponse, RouterData},
+    router_request_types::ResponseId,
+    router_response_types::PaymentsResponseData,
+    types::{PaymentsAuthorizeRouterData, PaymentsSyncRouterData},
+};
+use hyperswitch_interfaces::errors::ConnectorError;
 use masking::{PeekInterface, Secret};
 use serde::{Deserialize, Serialize};
 
 use crate::{
-    connector::utils::is_payment_failure,
-    core::errors,
-    types::{self, api, domain, storage::enums},
+    types::{PaymentsPostProcessingRouterData, ResponseRouterData},
+    utils::is_payment_failure,
 };
 
 pub struct PlaidRouterData<T> {
@@ -86,14 +94,12 @@ pub struct PlaidPaymentInitiation {
     payment_id: String,
 }
 
-impl TryFrom<&PlaidRouterData<&types::PaymentsAuthorizeRouterData>> for PlaidPaymentsRequest {
-    type Error = error_stack::Report<errors::ConnectorError>;
-    fn try_from(
-        item: &PlaidRouterData<&types::PaymentsAuthorizeRouterData>,
-    ) -> Result<Self, Self::Error> {
+impl TryFrom<&PlaidRouterData<&PaymentsAuthorizeRouterData>> for PlaidPaymentsRequest {
+    type Error = error_stack::Report<ConnectorError>;
+    fn try_from(item: &PlaidRouterData<&PaymentsAuthorizeRouterData>) -> Result<Self, Self::Error> {
         match item.router_data.request.payment_method_data.clone() {
-            domain::PaymentMethodData::OpenBanking(ref data) => match data {
-                domain::OpenBankingData::OpenBankingPIS { .. } => {
+            PaymentMethodData::OpenBanking(ref data) => match data {
+                OpenBankingData::OpenBankingPIS { .. } => {
                     let amount = item.amount;
                     let currency = item.router_data.request.currency;
                     let payment_id = item.router_data.payment_id.clone();
@@ -103,7 +109,7 @@ impl TryFrom<&PlaidRouterData<&types::PaymentsAuthorizeRouterData>> for PlaidPay
                     } else {
                         Some(payment_id)
                     }
-                    .ok_or(errors::ConnectorError::MissingRequiredField {
+                    .ok_or(ConnectorError::MissingRequiredField {
                         field_name: "payment_id",
                     })?;
                     let recipient_type = item
@@ -115,7 +121,7 @@ impl TryFrom<&PlaidRouterData<&types::PaymentsAuthorizeRouterData>> for PlaidPay
                                 data,
                             ) => data.clone(),
                         })
-                        .ok_or(errors::ConnectorError::MissingRequiredField {
+                        .ok_or(ConnectorError::MissingRequiredField {
                             field_name: "additional_merchant_data",
                         })?;
 
@@ -123,7 +129,7 @@ impl TryFrom<&PlaidRouterData<&types::PaymentsAuthorizeRouterData>> for PlaidPay
                         api_models::admin::MerchantRecipientData::ConnectorRecipientId(id) => {
                             Ok(id.peek().to_string())
                         }
-                        _ => Err(errors::ConnectorError::MissingRequiredField {
+                        _ => Err(ConnectorError::MissingRequiredField {
                             field_name: "ConnectorRecipientId",
                         }),
                     }?;
@@ -140,29 +146,29 @@ impl TryFrom<&PlaidRouterData<&types::PaymentsAuthorizeRouterData>> for PlaidPay
                     })
                 }
             },
-            _ => Err(errors::ConnectorError::NotImplemented("Payment methods".to_string()).into()),
+            _ => Err(ConnectorError::NotImplemented("Payment methods".to_string()).into()),
         }
     }
 }
 
-impl TryFrom<&types::PaymentsSyncRouterData> for PlaidSyncRequest {
-    type Error = error_stack::Report<errors::ConnectorError>;
-    fn try_from(item: &types::PaymentsSyncRouterData) -> Result<Self, Self::Error> {
+impl TryFrom<&PaymentsSyncRouterData> for PlaidSyncRequest {
+    type Error = error_stack::Report<ConnectorError>;
+    fn try_from(item: &PaymentsSyncRouterData) -> Result<Self, Self::Error> {
         match item.request.connector_transaction_id {
-            types::ResponseId::ConnectorTransactionId(ref id) => Ok(Self {
+            ResponseId::ConnectorTransactionId(ref id) => Ok(Self {
                 payment_id: id.clone(),
             }),
-            _ => Err((errors::ConnectorError::MissingConnectorTransactionID).into()),
+            _ => Err((ConnectorError::MissingConnectorTransactionID).into()),
         }
     }
 }
 
-impl TryFrom<&types::PaymentsPostProcessingRouterData> for PlaidLinkTokenRequest {
-    type Error = error_stack::Report<errors::ConnectorError>;
-    fn try_from(item: &types::PaymentsPostProcessingRouterData) -> Result<Self, Self::Error> {
+impl TryFrom<&PaymentsPostProcessingRouterData> for PlaidLinkTokenRequest {
+    type Error = error_stack::Report<ConnectorError>;
+    fn try_from(item: &PaymentsPostProcessingRouterData) -> Result<Self, Self::Error> {
         match item.request.payment_method_data {
-            domain::PaymentMethodData::OpenBanking(ref data) => match data {
-                domain::OpenBankingData::OpenBankingPIS { .. } => {
+            PaymentMethodData::OpenBanking(ref data) => match data {
+                OpenBankingData::OpenBankingPIS { .. } => {
                     let headers = item.header_payload.clone();
 
                     let platform = headers
@@ -181,7 +187,7 @@ impl TryFrom<&types::PaymentsPostProcessingRouterData> for PlaidLinkTokenRequest
                             .request
                             .country
                             .map(|code| vec![code.to_string()])
-                            .ok_or(errors::ConnectorError::MissingRequiredField {
+                            .ok_or(ConnectorError::MissingRequiredField {
                                 field_name: "billing.address.country",
                             })?,
                         language: "en".to_string(),
@@ -199,7 +205,7 @@ impl TryFrom<&types::PaymentsPostProcessingRouterData> for PlaidLinkTokenRequest
                                 .request
                                 .connector_transaction_id
                                 .clone()
-                                .ok_or(errors::ConnectorError::MissingConnectorTransactionID)?,
+                                .ok_or(ConnectorError::MissingConnectorTransactionID)?,
                         },
                         android_package_name: if is_android {
                             headers
@@ -218,7 +224,7 @@ impl TryFrom<&types::PaymentsPostProcessingRouterData> for PlaidLinkTokenRequest
                     })
                 }
             },
-            _ => Err(errors::ConnectorError::NotImplemented("Payment methods".to_string()).into()),
+            _ => Err(ConnectorError::NotImplemented("Payment methods".to_string()).into()),
         }
     }
 }
@@ -228,15 +234,15 @@ pub struct PlaidAuthType {
     pub secret: Secret<String>,
 }
 
-impl TryFrom<&types::ConnectorAuthType> for PlaidAuthType {
-    type Error = error_stack::Report<errors::ConnectorError>;
-    fn try_from(auth_type: &types::ConnectorAuthType) -> Result<Self, Self::Error> {
+impl TryFrom<&ConnectorAuthType> for PlaidAuthType {
+    type Error = error_stack::Report<ConnectorError>;
+    fn try_from(auth_type: &ConnectorAuthType) -> Result<Self, Self::Error> {
         match auth_type {
-            types::ConnectorAuthType::BodyKey { api_key, key1 } => Ok(Self {
+            ConnectorAuthType::BodyKey { api_key, key1 } => Ok(Self {
                 client_id: api_key.to_owned(),
                 secret: key1.to_owned(),
             }),
-            _ => Err(errors::ConnectorError::FailedToObtainAuthType.into()),
+            _ => Err(ConnectorError::FailedToObtainAuthType.into()),
         }
     }
 }
@@ -258,7 +264,7 @@ pub enum PlaidPaymentStatus {
     PaymentStatusAuthorising,
 }
 
-impl From<PlaidPaymentStatus> for enums::AttemptStatus {
+impl From<PlaidPaymentStatus> for AttemptStatus {
     fn from(item: PlaidPaymentStatus) -> Self {
         match item {
             PlaidPaymentStatus::PaymentStatusAuthorising => Self::Authorizing,
@@ -282,19 +288,18 @@ pub struct PlaidPaymentsResponse {
     payment_id: String,
 }
 
-impl<F, T>
-    TryFrom<types::ResponseRouterData<F, PlaidPaymentsResponse, T, types::PaymentsResponseData>>
-    for types::RouterData<F, T, types::PaymentsResponseData>
+impl<F, T> TryFrom<ResponseRouterData<F, PlaidPaymentsResponse, T, PaymentsResponseData>>
+    for RouterData<F, T, PaymentsResponseData>
 {
-    type Error = error_stack::Report<errors::ConnectorError>;
+    type Error = error_stack::Report<ConnectorError>;
     fn try_from(
-        item: types::ResponseRouterData<F, PlaidPaymentsResponse, T, types::PaymentsResponseData>,
+        item: ResponseRouterData<F, PlaidPaymentsResponse, T, PaymentsResponseData>,
     ) -> Result<Self, Self::Error> {
-        let status = enums::AttemptStatus::from(item.response.status.clone());
+        let status = AttemptStatus::from(item.response.status.clone());
         Ok(Self {
             status,
             response: if is_payment_failure(status) {
-                Err(types::ErrorResponse {
+                Err(ErrorResponse {
                     // populating status everywhere as plaid only sends back a status
                     code: item.response.status.clone().to_string(),
                     message: item.response.status.clone().to_string(),
@@ -307,8 +312,8 @@ impl<F, T>
                     network_error_message: None,
                 })
             } else {
-                Ok(types::PaymentsResponseData::TransactionResponse {
-                    resource_id: types::ResponseId::ConnectorTransactionId(
+                Ok(PaymentsResponseData::TransactionResponse {
+                    resource_id: ResponseId::ConnectorTransactionId(
                         item.response.payment_id.clone(),
                     ),
                     redirection_data: Box::new(None),
@@ -330,21 +335,20 @@ pub struct PlaidLinkTokenResponse {
     link_token: String,
 }
 
-impl<F, T>
-    TryFrom<types::ResponseRouterData<F, PlaidLinkTokenResponse, T, types::PaymentsResponseData>>
-    for types::RouterData<F, T, types::PaymentsResponseData>
+impl<F, T> TryFrom<ResponseRouterData<F, PlaidLinkTokenResponse, T, PaymentsResponseData>>
+    for RouterData<F, T, PaymentsResponseData>
 {
-    type Error = error_stack::Report<errors::ConnectorError>;
+    type Error = error_stack::Report<ConnectorError>;
     fn try_from(
-        item: types::ResponseRouterData<F, PlaidLinkTokenResponse, T, types::PaymentsResponseData>,
+        item: ResponseRouterData<F, PlaidLinkTokenResponse, T, PaymentsResponseData>,
     ) -> Result<Self, Self::Error> {
-        let session_token = Some(api::OpenBankingSessionToken {
+        let session_token = Some(OpenBankingSessionToken {
             open_banking_session_token: item.response.link_token,
         });
 
         Ok(Self {
-            status: enums::AttemptStatus::AuthenticationPending,
-            response: Ok(types::PaymentsResponseData::PostProcessingResponse { session_token }),
+            status: AttemptStatus::AuthenticationPending,
+            response: Ok(PaymentsResponseData::PostProcessingResponse { session_token }),
             ..item.data
         })
     }
@@ -372,18 +376,18 @@ pub struct PlaidSyncResponse {
     request_id: String,
 }
 
-impl<F, T> TryFrom<types::ResponseRouterData<F, PlaidSyncResponse, T, types::PaymentsResponseData>>
-    for types::RouterData<F, T, types::PaymentsResponseData>
+impl<F, T> TryFrom<ResponseRouterData<F, PlaidSyncResponse, T, PaymentsResponseData>>
+    for RouterData<F, T, PaymentsResponseData>
 {
-    type Error = error_stack::Report<errors::ConnectorError>;
+    type Error = error_stack::Report<ConnectorError>;
     fn try_from(
-        item: types::ResponseRouterData<F, PlaidSyncResponse, T, types::PaymentsResponseData>,
+        item: ResponseRouterData<F, PlaidSyncResponse, T, PaymentsResponseData>,
     ) -> Result<Self, Self::Error> {
-        let status = enums::AttemptStatus::from(item.response.status.clone());
+        let status = AttemptStatus::from(item.response.status.clone());
         Ok(Self {
             status,
             response: if is_payment_failure(status) {
-                Err(types::ErrorResponse {
+                Err(ErrorResponse {
                     // populating status everywhere as plaid only sends back a status
                     code: item.response.status.clone().to_string(),
                     message: item.response.status.clone().to_string(),
@@ -396,8 +400,8 @@ impl<F, T> TryFrom<types::ResponseRouterData<F, PlaidSyncResponse, T, types::Pay
                     network_error_message: None,
                 })
             } else {
-                Ok(types::PaymentsResponseData::TransactionResponse {
-                    resource_id: types::ResponseId::ConnectorTransactionId(
+                Ok(PaymentsResponseData::TransactionResponse {
+                    resource_id: ResponseId::ConnectorTransactionId(
                         item.response.payment_id.clone(),
                     ),
                     redirection_data: Box::new(None),
diff --git a/crates/hyperswitch_connectors/src/connectors/trustpay/transformers.rs b/crates/hyperswitch_connectors/src/connectors/trustpay/transformers.rs
index 72ef4d09a04..e0114269612 100644
--- a/crates/hyperswitch_connectors/src/connectors/trustpay/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/trustpay/transformers.rs
@@ -1314,7 +1314,7 @@ impl<F>
     }
 }
 
-pub fn get_apple_pay_session<F, T>(
+pub(crate) fn get_apple_pay_session<F, T>(
     instance_id: String,
     secrets: &SdkSecretInfo,
     apple_pay_init_result: TrustpayApplePayResponse,
@@ -1366,7 +1366,7 @@ pub fn get_apple_pay_session<F, T>(
     })
 }
 
-pub fn get_google_pay_session<F, T>(
+pub(crate) fn get_google_pay_session<F, T>(
     instance_id: String,
     secrets: &SdkSecretInfo,
     google_pay_init_result: TrustpayGooglePayResponse,
diff --git a/crates/hyperswitch_connectors/src/default_implementations.rs b/crates/hyperswitch_connectors/src/default_implementations.rs
index 4a597eb6280..f8a274d1e1d 100644
--- a/crates/hyperswitch_connectors/src/default_implementations.rs
+++ b/crates/hyperswitch_connectors/src/default_implementations.rs
@@ -118,6 +118,7 @@ macro_rules! default_imp_for_authorize_session_token {
 default_imp_for_authorize_session_token!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -140,6 +141,7 @@ default_imp_for_authorize_session_token!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -150,6 +152,7 @@ default_imp_for_authorize_session_token!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -158,6 +161,7 @@ default_imp_for_authorize_session_token!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Nomupay,
     connectors::Noon,
@@ -174,6 +178,7 @@ default_imp_for_authorize_session_token!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -220,6 +225,7 @@ macro_rules! default_imp_for_calculate_tax {
 default_imp_for_calculate_tax!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -242,6 +248,7 @@ default_imp_for_calculate_tax!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -252,6 +259,7 @@ default_imp_for_calculate_tax!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -264,6 +272,7 @@ default_imp_for_calculate_tax!(
     connectors::Mollie,
     connectors::Moneris,
     connectors::Multisafepay,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Opayo,
@@ -281,6 +290,7 @@ default_imp_for_calculate_tax!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Rapyd,
@@ -323,6 +333,7 @@ macro_rules! default_imp_for_session_update {
 default_imp_for_session_update!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -344,6 +355,7 @@ default_imp_for_session_update!(
     connectors::Datatrans,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -371,6 +383,7 @@ default_imp_for_session_update!(
     connectors::Mollie,
     connectors::Moneris,
     connectors::Multisafepay,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Nomupay,
     connectors::Noon,
@@ -387,11 +400,13 @@ default_imp_for_session_update!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::UnifiedAuthenticationService,
     connectors::Fiuu,
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Worldline,
     connectors::Worldpay,
@@ -426,6 +441,7 @@ macro_rules! default_imp_for_post_session_tokens {
 default_imp_for_post_session_tokens!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -447,6 +463,7 @@ default_imp_for_post_session_tokens!(
     connectors::Datatrans,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -474,6 +491,7 @@ default_imp_for_post_session_tokens!(
     connectors::Mollie,
     connectors::Moneris,
     connectors::Multisafepay,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Nomupay,
     connectors::Noon,
@@ -490,10 +508,12 @@ default_imp_for_post_session_tokens!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Fiuu,
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Worldline,
     connectors::Worldpay,
@@ -529,6 +549,7 @@ macro_rules! default_imp_for_update_metadata {
 default_imp_for_update_metadata!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -550,6 +571,7 @@ default_imp_for_update_metadata!(
     connectors::Datatrans,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -577,6 +599,7 @@ default_imp_for_update_metadata!(
     connectors::Mollie,
     connectors::Moneris,
     connectors::Multisafepay,
+    connectors::Netcetera,
     connectors::Nomupay,
     connectors::Noon,
     connectors::Novalnet,
@@ -592,11 +615,13 @@ default_imp_for_update_metadata!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Payone,
     connectors::Fiuu,
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Worldline,
     connectors::Worldpay,
@@ -635,6 +660,7 @@ macro_rules! default_imp_for_complete_authorize {
 default_imp_for_complete_authorize!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Amazonpay,
     connectors::Bamboraapac,
     connectors::Bankofamerica,
@@ -649,6 +675,7 @@ default_imp_for_complete_authorize!(
     connectors::Cryptopay,
     connectors::Datatrans,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -658,6 +685,7 @@ default_imp_for_complete_authorize!(
     connectors::Getnet,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -669,6 +697,7 @@ default_imp_for_complete_authorize!(
     connectors::Mifinity,
     connectors::Moneris,
     connectors::Multisafepay,
+    connectors::Netcetera,
     connectors::Nomupay,
     connectors::Noon,
     connectors::Novalnet,
@@ -680,6 +709,7 @@ default_imp_for_complete_authorize!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Rapyd,
     connectors::Razorpay,
     connectors::Recurly,
@@ -719,6 +749,7 @@ macro_rules! default_imp_for_incremental_authorization {
 default_imp_for_incremental_authorization!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -740,6 +771,7 @@ default_imp_for_incremental_authorization!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -750,6 +782,7 @@ default_imp_for_incremental_authorization!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -758,6 +791,7 @@ default_imp_for_incremental_authorization!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Nomupay,
     connectors::Noon,
@@ -775,6 +809,7 @@ default_imp_for_incremental_authorization!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -822,6 +857,7 @@ macro_rules! default_imp_for_create_customer {
 default_imp_for_create_customer!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -844,6 +880,7 @@ default_imp_for_create_customer!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -852,6 +889,7 @@ default_imp_for_create_customer!(
     connectors::Getnet,
     connectors::Globalpay,
     connectors::Globepay,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -864,6 +902,7 @@ default_imp_for_create_customer!(
     connectors::Mollie,
     connectors::Moneris,
     connectors::Multisafepay,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Nomupay,
     connectors::Noon,
@@ -881,6 +920,7 @@ default_imp_for_create_customer!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Rapyd,
@@ -926,6 +966,7 @@ macro_rules! default_imp_for_connector_redirect_response {
 default_imp_for_connector_redirect_response!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Amazonpay,
     connectors::Billwerk,
     connectors::Bitpay,
@@ -941,6 +982,7 @@ default_imp_for_connector_redirect_response!(
     connectors::Datatrans,
     connectors::Deutschebank,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -950,6 +992,7 @@ default_imp_for_connector_redirect_response!(
     connectors::Getnet,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -961,6 +1004,7 @@ default_imp_for_connector_redirect_response!(
     connectors::Mifinity,
     connectors::Moneris,
     connectors::Multisafepay,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Opayo,
@@ -970,6 +1014,7 @@ default_imp_for_connector_redirect_response!(
     connectors::Payone,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Rapyd,
@@ -1009,6 +1054,7 @@ macro_rules! default_imp_for_pre_processing_steps{
 
 default_imp_for_pre_processing_steps!(
     connectors::Aci,
+    connectors::Adyenplatform,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
     connectors::Bambora,
@@ -1029,6 +1075,7 @@ default_imp_for_pre_processing_steps!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -1038,6 +1085,7 @@ default_imp_for_pre_processing_steps!(
     connectors::Getnet,
     connectors::Globalpay,
     connectors::Globepay,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -1046,6 +1094,7 @@ default_imp_for_pre_processing_steps!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nomupay,
     connectors::Noon,
     connectors::Novalnet,
@@ -1058,6 +1107,7 @@ default_imp_for_pre_processing_steps!(
     connectors::Payone,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -1102,6 +1152,7 @@ macro_rules! default_imp_for_post_processing_steps{
 default_imp_for_post_processing_steps!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -1124,6 +1175,7 @@ default_imp_for_post_processing_steps!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -1134,6 +1186,7 @@ default_imp_for_post_processing_steps!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -1142,6 +1195,7 @@ default_imp_for_post_processing_steps!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Nomupay,
     connectors::Noon,
@@ -1207,6 +1261,7 @@ macro_rules! default_imp_for_approve {
 default_imp_for_approve!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -1229,6 +1284,7 @@ default_imp_for_approve!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -1239,6 +1295,7 @@ default_imp_for_approve!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -1247,6 +1304,7 @@ default_imp_for_approve!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nomupay,
     connectors::Noon,
     connectors::Novalnet,
@@ -1264,6 +1322,7 @@ default_imp_for_approve!(
     connectors::Payone,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -1312,6 +1371,7 @@ macro_rules! default_imp_for_reject {
 default_imp_for_reject!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -1334,6 +1394,7 @@ default_imp_for_reject!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -1344,6 +1405,7 @@ default_imp_for_reject!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -1352,6 +1414,7 @@ default_imp_for_reject!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Nomupay,
     connectors::Noon,
@@ -1369,6 +1432,7 @@ default_imp_for_reject!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -1417,6 +1481,7 @@ macro_rules! default_imp_for_webhook_source_verification {
 default_imp_for_webhook_source_verification!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -1440,6 +1505,7 @@ default_imp_for_webhook_source_verification!(
     connectors::Digitalvirgo,
     connectors::Dlocal,
     connectors::Elavon,
+    connectors::Ebanx,
     connectors::Facilitapay,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -1449,6 +1515,7 @@ default_imp_for_webhook_source_verification!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -1457,6 +1524,7 @@ default_imp_for_webhook_source_verification!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Nomupay,
     connectors::Noon,
@@ -1473,6 +1541,7 @@ default_imp_for_webhook_source_verification!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -1521,6 +1590,7 @@ macro_rules! default_imp_for_accept_dispute {
 
 default_imp_for_accept_dispute!(
     connectors::Aci,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -1542,6 +1612,7 @@ default_imp_for_accept_dispute!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -1552,6 +1623,7 @@ default_imp_for_accept_dispute!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -1560,6 +1632,7 @@ default_imp_for_accept_dispute!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Nomupay,
     connectors::Noon,
@@ -1577,6 +1650,7 @@ default_imp_for_accept_dispute!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -1624,6 +1698,7 @@ macro_rules! default_imp_for_submit_evidence {
 
 default_imp_for_submit_evidence!(
     connectors::Aci,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -1645,6 +1720,7 @@ default_imp_for_submit_evidence!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -1655,6 +1731,7 @@ default_imp_for_submit_evidence!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -1663,6 +1740,7 @@ default_imp_for_submit_evidence!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Nomupay,
     connectors::Noon,
@@ -1680,6 +1758,7 @@ default_imp_for_submit_evidence!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -1727,6 +1806,7 @@ macro_rules! default_imp_for_defend_dispute {
 
 default_imp_for_defend_dispute!(
     connectors::Aci,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -1748,6 +1828,7 @@ default_imp_for_defend_dispute!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -1758,6 +1839,7 @@ default_imp_for_defend_dispute!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Iatapay,
     connectors::Inespay,
@@ -1766,6 +1848,7 @@ default_imp_for_defend_dispute!(
     connectors::Juspaythreedsserver,
     connectors::Klarna,
     connectors::Helcim,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Nomupay,
     connectors::Noon,
@@ -1783,6 +1866,7 @@ default_imp_for_defend_dispute!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -1839,6 +1923,7 @@ macro_rules! default_imp_for_file_upload {
 
 default_imp_for_file_upload!(
     connectors::Aci,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -1860,6 +1945,7 @@ default_imp_for_file_upload!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -1870,6 +1956,7 @@ default_imp_for_file_upload!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -1878,6 +1965,7 @@ default_imp_for_file_upload!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Nomupay,
     connectors::Noon,
@@ -1895,6 +1983,7 @@ default_imp_for_file_upload!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -1966,6 +2055,7 @@ default_imp_for_payouts!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -1983,6 +2073,7 @@ default_imp_for_payouts!(
     connectors::Opayo,
     connectors::Opennode,
     connectors::Paybox,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Noon,
     connectors::Novalnet,
@@ -1992,6 +2083,7 @@ default_imp_for_payouts!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Rapyd,
@@ -2036,6 +2128,7 @@ macro_rules! default_imp_for_payouts_create {
 #[cfg(feature = "payouts")]
 default_imp_for_payouts_create!(
     connectors::Aci,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -2068,6 +2161,7 @@ default_imp_for_payouts_create!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -2076,6 +2170,7 @@ default_imp_for_payouts_create!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Noon,
     connectors::Novalnet,
@@ -2091,6 +2186,7 @@ default_imp_for_payouts_create!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -2141,6 +2237,7 @@ macro_rules! default_imp_for_payouts_retrieve {
 default_imp_for_payouts_retrieve!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -2163,6 +2260,7 @@ default_imp_for_payouts_retrieve!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -2173,6 +2271,7 @@ default_imp_for_payouts_retrieve!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -2181,6 +2280,7 @@ default_imp_for_payouts_retrieve!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Noon,
     connectors::Novalnet,
@@ -2196,6 +2296,7 @@ default_imp_for_payouts_retrieve!(
     connectors::Payu,
     connectors::Payone,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -2245,6 +2346,7 @@ macro_rules! default_imp_for_payouts_eligibility {
 #[cfg(feature = "payouts")]
 default_imp_for_payouts_eligibility!(
     connectors::Aci,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -2277,6 +2379,7 @@ default_imp_for_payouts_eligibility!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -2285,6 +2388,7 @@ default_imp_for_payouts_eligibility!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Noon,
     connectors::Novalnet,
@@ -2301,6 +2405,7 @@ default_imp_for_payouts_eligibility!(
     connectors::Payone,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -2381,6 +2486,7 @@ default_imp_for_payouts_fulfill!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -2389,6 +2495,7 @@ default_imp_for_payouts_fulfill!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Noon,
     connectors::Novalnet,
     connectors::Nexinets,
@@ -2403,6 +2510,7 @@ default_imp_for_payouts_fulfill!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -2452,6 +2560,7 @@ macro_rules! default_imp_for_payouts_cancel {
 #[cfg(feature = "payouts")]
 default_imp_for_payouts_cancel!(
     connectors::Aci,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -2484,6 +2593,7 @@ default_imp_for_payouts_cancel!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -2492,6 +2602,7 @@ default_imp_for_payouts_cancel!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Noon,
     connectors::Novalnet,
@@ -2508,6 +2619,7 @@ default_imp_for_payouts_cancel!(
     connectors::Payone,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -2558,6 +2670,7 @@ macro_rules! default_imp_for_payouts_quote {
 default_imp_for_payouts_quote!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -2590,6 +2703,7 @@ default_imp_for_payouts_quote!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -2598,6 +2712,7 @@ default_imp_for_payouts_quote!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Noon,
     connectors::Novalnet,
@@ -2614,6 +2729,7 @@ default_imp_for_payouts_quote!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -2664,6 +2780,7 @@ macro_rules! default_imp_for_payouts_recipient {
 default_imp_for_payouts_recipient!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -2696,6 +2813,7 @@ default_imp_for_payouts_recipient!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -2704,6 +2822,7 @@ default_imp_for_payouts_recipient!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Noon,
     connectors::Novalnet,
@@ -2720,6 +2839,7 @@ default_imp_for_payouts_recipient!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -2770,6 +2890,7 @@ macro_rules! default_imp_for_payouts_recipient_account {
 default_imp_for_payouts_recipient_account!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -2792,6 +2913,7 @@ default_imp_for_payouts_recipient_account!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -2802,6 +2924,7 @@ default_imp_for_payouts_recipient_account!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -2810,6 +2933,7 @@ default_imp_for_payouts_recipient_account!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Noon,
     connectors::Novalnet,
@@ -2826,6 +2950,7 @@ default_imp_for_payouts_recipient_account!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -2876,6 +3001,7 @@ macro_rules! default_imp_for_frm_sale {
 default_imp_for_frm_sale!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -2898,6 +3024,7 @@ default_imp_for_frm_sale!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -2908,6 +3035,7 @@ default_imp_for_frm_sale!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -2916,6 +3044,7 @@ default_imp_for_frm_sale!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nomupay,
     connectors::Nmi,
     connectors::Noon,
@@ -2933,6 +3062,7 @@ default_imp_for_frm_sale!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -2982,6 +3112,7 @@ macro_rules! default_imp_for_frm_checkout {
 default_imp_for_frm_checkout!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -3004,6 +3135,7 @@ default_imp_for_frm_checkout!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -3014,6 +3146,7 @@ default_imp_for_frm_checkout!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -3022,6 +3155,7 @@ default_imp_for_frm_checkout!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Nomupay,
     connectors::Noon,
@@ -3039,6 +3173,7 @@ default_imp_for_frm_checkout!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -3088,6 +3223,7 @@ macro_rules! default_imp_for_frm_transaction {
 default_imp_for_frm_transaction!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -3110,6 +3246,7 @@ default_imp_for_frm_transaction!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -3120,6 +3257,7 @@ default_imp_for_frm_transaction!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -3128,6 +3266,7 @@ default_imp_for_frm_transaction!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Nomupay,
     connectors::Noon,
@@ -3145,6 +3284,7 @@ default_imp_for_frm_transaction!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -3194,6 +3334,7 @@ macro_rules! default_imp_for_frm_fulfillment {
 default_imp_for_frm_fulfillment!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -3216,6 +3357,7 @@ default_imp_for_frm_fulfillment!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -3226,6 +3368,7 @@ default_imp_for_frm_fulfillment!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -3234,6 +3377,7 @@ default_imp_for_frm_fulfillment!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Nomupay,
     connectors::Noon,
@@ -3251,6 +3395,7 @@ default_imp_for_frm_fulfillment!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -3300,6 +3445,7 @@ macro_rules! default_imp_for_frm_record_return {
 default_imp_for_frm_record_return!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -3322,6 +3468,7 @@ default_imp_for_frm_record_return!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -3332,6 +3479,7 @@ default_imp_for_frm_record_return!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -3340,6 +3488,7 @@ default_imp_for_frm_record_return!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Nomupay,
     connectors::Noon,
@@ -3357,6 +3506,7 @@ default_imp_for_frm_record_return!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -3403,6 +3553,7 @@ macro_rules! default_imp_for_revoking_mandates {
 default_imp_for_revoking_mandates!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -3423,6 +3574,7 @@ default_imp_for_revoking_mandates!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -3433,6 +3585,7 @@ default_imp_for_revoking_mandates!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -3441,6 +3594,7 @@ default_imp_for_revoking_mandates!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Nomupay,
     connectors::Novalnet,
@@ -3457,6 +3611,7 @@ default_imp_for_revoking_mandates!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -3504,6 +3659,7 @@ macro_rules! default_imp_for_uas_pre_authentication {
 default_imp_for_uas_pre_authentication!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -3527,6 +3683,7 @@ default_imp_for_uas_pre_authentication!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -3537,6 +3694,7 @@ default_imp_for_uas_pre_authentication!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -3544,6 +3702,7 @@ default_imp_for_uas_pre_authentication!(
     connectors::Itaubank,
     connectors::Jpmorgan,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Nomupay,
     connectors::Noon,
@@ -3567,6 +3726,7 @@ default_imp_for_uas_pre_authentication!(
     connectors::Multisafepay,
     connectors::Paybox,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Rapyd,
     connectors::Razorpay,
     connectors::Recurly,
@@ -3606,6 +3766,7 @@ macro_rules! default_imp_for_uas_post_authentication {
 default_imp_for_uas_post_authentication!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -3629,6 +3790,7 @@ default_imp_for_uas_post_authentication!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -3639,6 +3801,7 @@ default_imp_for_uas_post_authentication!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -3646,6 +3809,7 @@ default_imp_for_uas_post_authentication!(
     connectors::Itaubank,
     connectors::Jpmorgan,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Nomupay,
     connectors::Noon,
@@ -3663,6 +3827,7 @@ default_imp_for_uas_post_authentication!(
     connectors::Payu,
     connectors::Powertranz,
     connectors::Prophetpay,
+    connectors::Plaid,
     connectors::Mifinity,
     connectors::Mollie,
     connectors::Moneris,
@@ -3709,6 +3874,7 @@ macro_rules! default_imp_for_uas_authentication_confirmation {
 default_imp_for_uas_authentication_confirmation!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -3732,6 +3898,7 @@ default_imp_for_uas_authentication_confirmation!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -3742,6 +3909,7 @@ default_imp_for_uas_authentication_confirmation!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -3749,6 +3917,7 @@ default_imp_for_uas_authentication_confirmation!(
     connectors::Itaubank,
     connectors::Jpmorgan,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Nomupay,
     connectors::Noon,
@@ -3772,6 +3941,7 @@ default_imp_for_uas_authentication_confirmation!(
     connectors::Paybox,
     connectors::Paypal,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Rapyd,
     connectors::Razorpay,
     connectors::Recurly,
@@ -3804,6 +3974,7 @@ macro_rules! default_imp_for_connector_request_id {
 default_imp_for_connector_request_id!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Authorizedotnet,
     connectors::Amazonpay,
@@ -3827,6 +3998,7 @@ default_imp_for_connector_request_id!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -3837,6 +4009,7 @@ default_imp_for_connector_request_id!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Iatapay,
     connectors::Inespay,
@@ -3844,6 +4017,7 @@ default_imp_for_connector_request_id!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Nomupay,
     connectors::Novalnet,
@@ -3866,6 +4040,7 @@ default_imp_for_connector_request_id!(
     connectors::Multisafepay,
     connectors::Paybox,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Rapyd,
     connectors::Razorpay,
     connectors::Recurly,
@@ -3901,6 +4076,7 @@ macro_rules! default_imp_for_fraud_check {
 default_imp_for_fraud_check!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -3924,6 +4100,7 @@ default_imp_for_fraud_check!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -3934,6 +4111,7 @@ default_imp_for_fraud_check!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Helcim,
     connectors::Hipay,
     connectors::Iatapay,
@@ -3942,6 +4120,7 @@ default_imp_for_fraud_check!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Nomupay,
     connectors::Novalnet,
@@ -3965,6 +4144,7 @@ default_imp_for_fraud_check!(
     connectors::Payme,
     connectors::Payone,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Rapyd,
     connectors::Razorpay,
     connectors::Recurly,
@@ -4029,6 +4209,7 @@ macro_rules! default_imp_for_connector_authentication {
 default_imp_for_connector_authentication!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -4052,6 +4233,7 @@ default_imp_for_connector_authentication!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -4093,6 +4275,7 @@ default_imp_for_connector_authentication!(
     connectors::Payme,
     connectors::Paypal,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Rapyd,
     connectors::Razorpay,
     connectors::Recurly,
@@ -4132,6 +4315,7 @@ macro_rules! default_imp_for_uas_authentication {
 default_imp_for_uas_authentication!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -4155,6 +4339,7 @@ default_imp_for_uas_authentication!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -4165,6 +4350,7 @@ default_imp_for_uas_authentication!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Helcim,
     connectors::Hipay,
     connectors::Iatapay,
@@ -4172,6 +4358,7 @@ default_imp_for_uas_authentication!(
     connectors::Itaubank,
     connectors::Jpmorgan,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Nomupay,
     connectors::Novalnet,
@@ -4195,6 +4382,7 @@ default_imp_for_uas_authentication!(
     connectors::Payme,
     connectors::Payone,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Rapyd,
     connectors::Razorpay,
     connectors::Recurly,
@@ -4227,6 +4415,7 @@ macro_rules! default_imp_for_revenue_recovery {
 default_imp_for_revenue_recovery! {
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -4250,6 +4439,7 @@ default_imp_for_revenue_recovery! {
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -4260,6 +4450,7 @@ default_imp_for_revenue_recovery! {
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -4268,6 +4459,7 @@ default_imp_for_revenue_recovery! {
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Nomupay,
     connectors::Noon,
@@ -4291,6 +4483,7 @@ default_imp_for_revenue_recovery! {
     connectors::Payme,
     connectors::Payone,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Rapyd,
     connectors::Razorpay,
     connectors::Recurly,
@@ -4333,6 +4526,7 @@ macro_rules! default_imp_for_billing_connector_payment_sync {
 default_imp_for_billing_connector_payment_sync!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -4356,6 +4550,7 @@ default_imp_for_billing_connector_payment_sync!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -4366,6 +4561,7 @@ default_imp_for_billing_connector_payment_sync!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Helcim,
     connectors::Hipay,
     connectors::Iatapay,
@@ -4375,6 +4571,7 @@ default_imp_for_billing_connector_payment_sync!(
     connectors::Jpmorgan,
     connectors::Klarna,
     connectors::Nomupay,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Noon,
     connectors::Novalnet,
@@ -4397,6 +4594,7 @@ default_imp_for_billing_connector_payment_sync!(
     connectors::Payme,
     connectors::Payone,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Rapyd,
     connectors::Razorpay,
     connectors::Recurly,
@@ -4438,6 +4636,7 @@ macro_rules! default_imp_for_revenue_recovery_record_back {
 default_imp_for_revenue_recovery_record_back!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -4460,6 +4659,7 @@ default_imp_for_revenue_recovery_record_back!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -4470,6 +4670,7 @@ default_imp_for_revenue_recovery_record_back!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Helcim,
     connectors::Hipay,
     connectors::Iatapay,
@@ -4478,6 +4679,7 @@ default_imp_for_revenue_recovery_record_back!(
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Klarna,
+    connectors::Netcetera,
     connectors::Nmi,
     connectors::Nomupay,
     connectors::Noon,
@@ -4501,6 +4703,7 @@ default_imp_for_revenue_recovery_record_back!(
     connectors::Payme,
     connectors::Payone,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Rapyd,
     connectors::Razorpay,
     connectors::Recurly,
@@ -4542,6 +4745,7 @@ macro_rules! default_imp_for_billing_connector_invoice_sync {
 default_imp_for_billing_connector_invoice_sync!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -4566,6 +4770,7 @@ default_imp_for_billing_connector_invoice_sync!(
     connectors::Digitalvirgo,
     connectors::Dlocal,
     connectors::Elavon,
+    connectors::Ebanx,
     connectors::Facilitapay,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -4575,6 +4780,7 @@ default_imp_for_billing_connector_invoice_sync!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Helcim,
     connectors::Hipay,
     connectors::Iatapay,
@@ -4587,6 +4793,7 @@ default_imp_for_billing_connector_invoice_sync!(
     connectors::Nmi,
     connectors::Noon,
     connectors::Novalnet,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Nuvei,
@@ -4606,6 +4813,7 @@ default_imp_for_billing_connector_invoice_sync!(
     connectors::Payme,
     connectors::Payone,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Rapyd,
     connectors::Razorpay,
     connectors::Recurly,
diff --git a/crates/hyperswitch_connectors/src/default_implementations_v2.rs b/crates/hyperswitch_connectors/src/default_implementations_v2.rs
index 0c17f4942f2..c131cab0f1b 100644
--- a/crates/hyperswitch_connectors/src/default_implementations_v2.rs
+++ b/crates/hyperswitch_connectors/src/default_implementations_v2.rs
@@ -242,6 +242,7 @@ macro_rules! default_imp_for_new_connector_integration_payment {
 default_imp_for_new_connector_integration_payment!(
     connectors::Airwallex,
     connectors::Amazonpay,
+    connectors::Adyenplatform,
     connectors::Authorizedotnet,
     connectors::Bambora,
     connectors::Bamboraapac,
@@ -263,6 +264,7 @@ default_imp_for_new_connector_integration_payment!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -273,6 +275,7 @@ default_imp_for_new_connector_integration_payment!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -284,6 +287,7 @@ default_imp_for_new_connector_integration_payment!(
     connectors::Nomupay,
     connectors::Noon,
     connectors::Novalnet,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Nmi,
@@ -298,6 +302,7 @@ default_imp_for_new_connector_integration_payment!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -346,6 +351,7 @@ macro_rules! default_imp_for_new_connector_integration_refund {
 default_imp_for_new_connector_integration_refund!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -369,6 +375,7 @@ default_imp_for_new_connector_integration_refund!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -379,6 +386,7 @@ default_imp_for_new_connector_integration_refund!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -390,6 +398,7 @@ default_imp_for_new_connector_integration_refund!(
     connectors::Nomupay,
     connectors::Noon,
     connectors::Novalnet,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Nmi,
@@ -404,6 +413,7 @@ default_imp_for_new_connector_integration_refund!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -447,6 +457,7 @@ macro_rules! default_imp_for_new_connector_integration_connector_access_token {
 default_imp_for_new_connector_integration_connector_access_token!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -470,6 +481,7 @@ default_imp_for_new_connector_integration_connector_access_token!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -480,6 +492,7 @@ default_imp_for_new_connector_integration_connector_access_token!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -491,6 +504,7 @@ default_imp_for_new_connector_integration_connector_access_token!(
     connectors::Nomupay,
     connectors::Noon,
     connectors::Novalnet,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Nmi,
@@ -505,6 +519,7 @@ default_imp_for_new_connector_integration_connector_access_token!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -554,6 +569,7 @@ macro_rules! default_imp_for_new_connector_integration_accept_dispute {
 default_imp_for_new_connector_integration_accept_dispute!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -576,6 +592,7 @@ default_imp_for_new_connector_integration_accept_dispute!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -586,6 +603,7 @@ default_imp_for_new_connector_integration_accept_dispute!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -597,6 +615,7 @@ default_imp_for_new_connector_integration_accept_dispute!(
     connectors::Nomupay,
     connectors::Noon,
     connectors::Novalnet,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Nmi,
@@ -611,6 +630,7 @@ default_imp_for_new_connector_integration_accept_dispute!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -659,6 +679,7 @@ macro_rules! default_imp_for_new_connector_integration_submit_evidence {
 default_imp_for_new_connector_integration_submit_evidence!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -681,6 +702,7 @@ default_imp_for_new_connector_integration_submit_evidence!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -691,6 +713,7 @@ default_imp_for_new_connector_integration_submit_evidence!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -702,6 +725,7 @@ default_imp_for_new_connector_integration_submit_evidence!(
     connectors::Nomupay,
     connectors::Noon,
     connectors::Novalnet,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Nmi,
@@ -716,6 +740,7 @@ default_imp_for_new_connector_integration_submit_evidence!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -764,6 +789,7 @@ macro_rules! default_imp_for_new_connector_integration_defend_dispute {
 default_imp_for_new_connector_integration_defend_dispute!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -787,6 +813,7 @@ default_imp_for_new_connector_integration_defend_dispute!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -797,6 +824,7 @@ default_imp_for_new_connector_integration_defend_dispute!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -808,6 +836,7 @@ default_imp_for_new_connector_integration_defend_dispute!(
     connectors::Nomupay,
     connectors::Noon,
     connectors::Novalnet,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Nmi,
@@ -822,6 +851,7 @@ default_imp_for_new_connector_integration_defend_dispute!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -880,6 +910,7 @@ macro_rules! default_imp_for_new_connector_integration_file_upload {
 default_imp_for_new_connector_integration_file_upload!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -903,6 +934,7 @@ default_imp_for_new_connector_integration_file_upload!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -913,6 +945,7 @@ default_imp_for_new_connector_integration_file_upload!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -924,13 +957,14 @@ default_imp_for_new_connector_integration_file_upload!(
     connectors::Nomupay,
     connectors::Noon,
     connectors::Novalnet,
-    connectors::Nmi,
-    connectors::Payone,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
+    connectors::Nmi,
+    connectors::Nuvei,
     connectors::Opayo,
     connectors::Opennode,
-    connectors::Nuvei,
+    connectors::Payone,
     connectors::Paybox,
     connectors::Payeezy,
     connectors::Payme,
@@ -938,6 +972,7 @@ default_imp_for_new_connector_integration_file_upload!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -988,6 +1023,7 @@ macro_rules! default_imp_for_new_connector_integration_payouts_create {
 default_imp_for_new_connector_integration_payouts_create!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -1011,6 +1047,7 @@ default_imp_for_new_connector_integration_payouts_create!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -1021,6 +1058,7 @@ default_imp_for_new_connector_integration_payouts_create!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -1032,6 +1070,7 @@ default_imp_for_new_connector_integration_payouts_create!(
     connectors::Nomupay,
     connectors::Noon,
     connectors::Novalnet,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Opayo,
@@ -1046,6 +1085,7 @@ default_imp_for_new_connector_integration_payouts_create!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -1096,6 +1136,7 @@ macro_rules! default_imp_for_new_connector_integration_payouts_eligibility {
 default_imp_for_new_connector_integration_payouts_eligibility!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -1119,6 +1160,7 @@ default_imp_for_new_connector_integration_payouts_eligibility!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -1129,6 +1171,7 @@ default_imp_for_new_connector_integration_payouts_eligibility!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -1140,6 +1183,7 @@ default_imp_for_new_connector_integration_payouts_eligibility!(
     connectors::Nomupay,
     connectors::Noon,
     connectors::Novalnet,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Nmi,
@@ -1154,6 +1198,7 @@ default_imp_for_new_connector_integration_payouts_eligibility!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -1204,6 +1249,7 @@ macro_rules! default_imp_for_new_connector_integration_payouts_fulfill {
 default_imp_for_new_connector_integration_payouts_fulfill!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -1227,6 +1273,7 @@ default_imp_for_new_connector_integration_payouts_fulfill!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -1237,6 +1284,7 @@ default_imp_for_new_connector_integration_payouts_fulfill!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -1248,6 +1296,7 @@ default_imp_for_new_connector_integration_payouts_fulfill!(
     connectors::Nomupay,
     connectors::Noon,
     connectors::Novalnet,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Nmi,
@@ -1262,6 +1311,7 @@ default_imp_for_new_connector_integration_payouts_fulfill!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -1312,6 +1362,7 @@ macro_rules! default_imp_for_new_connector_integration_payouts_cancel {
 default_imp_for_new_connector_integration_payouts_cancel!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -1335,6 +1386,7 @@ default_imp_for_new_connector_integration_payouts_cancel!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -1345,6 +1397,7 @@ default_imp_for_new_connector_integration_payouts_cancel!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -1356,6 +1409,7 @@ default_imp_for_new_connector_integration_payouts_cancel!(
     connectors::Nomupay,
     connectors::Noon,
     connectors::Novalnet,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Nmi,
@@ -1370,6 +1424,7 @@ default_imp_for_new_connector_integration_payouts_cancel!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -1420,6 +1475,7 @@ macro_rules! default_imp_for_new_connector_integration_payouts_quote {
 default_imp_for_new_connector_integration_payouts_quote!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -1443,6 +1499,7 @@ default_imp_for_new_connector_integration_payouts_quote!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -1453,6 +1510,7 @@ default_imp_for_new_connector_integration_payouts_quote!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -1464,6 +1522,7 @@ default_imp_for_new_connector_integration_payouts_quote!(
     connectors::Nomupay,
     connectors::Noon,
     connectors::Novalnet,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Nmi,
@@ -1478,6 +1537,7 @@ default_imp_for_new_connector_integration_payouts_quote!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -1528,6 +1588,7 @@ macro_rules! default_imp_for_new_connector_integration_payouts_recipient {
 default_imp_for_new_connector_integration_payouts_recipient!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -1551,6 +1612,7 @@ default_imp_for_new_connector_integration_payouts_recipient!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -1561,6 +1623,7 @@ default_imp_for_new_connector_integration_payouts_recipient!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -1572,6 +1635,7 @@ default_imp_for_new_connector_integration_payouts_recipient!(
     connectors::Nomupay,
     connectors::Noon,
     connectors::Novalnet,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Nmi,
@@ -1586,6 +1650,7 @@ default_imp_for_new_connector_integration_payouts_recipient!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -1636,6 +1701,7 @@ macro_rules! default_imp_for_new_connector_integration_payouts_sync {
 default_imp_for_new_connector_integration_payouts_sync!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -1659,6 +1725,7 @@ default_imp_for_new_connector_integration_payouts_sync!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -1669,6 +1736,7 @@ default_imp_for_new_connector_integration_payouts_sync!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -1680,6 +1748,7 @@ default_imp_for_new_connector_integration_payouts_sync!(
     connectors::Nomupay,
     connectors::Noon,
     connectors::Novalnet,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Nmi,
@@ -1694,6 +1763,7 @@ default_imp_for_new_connector_integration_payouts_sync!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -1744,6 +1814,7 @@ macro_rules! default_imp_for_new_connector_integration_payouts_recipient_account
 default_imp_for_new_connector_integration_payouts_recipient_account!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -1767,6 +1838,7 @@ default_imp_for_new_connector_integration_payouts_recipient_account!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -1777,6 +1849,7 @@ default_imp_for_new_connector_integration_payouts_recipient_account!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -1788,6 +1861,7 @@ default_imp_for_new_connector_integration_payouts_recipient_account!(
     connectors::Nomupay,
     connectors::Noon,
     connectors::Novalnet,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Nmi,
@@ -1802,6 +1876,7 @@ default_imp_for_new_connector_integration_payouts_recipient_account!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -1850,6 +1925,7 @@ macro_rules! default_imp_for_new_connector_integration_webhook_source_verificati
 default_imp_for_new_connector_integration_webhook_source_verification!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -1873,6 +1949,7 @@ default_imp_for_new_connector_integration_webhook_source_verification!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -1883,6 +1960,7 @@ default_imp_for_new_connector_integration_webhook_source_verification!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -1894,6 +1972,7 @@ default_imp_for_new_connector_integration_webhook_source_verification!(
     connectors::Nomupay,
     connectors::Noon,
     connectors::Novalnet,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Nmi,
@@ -1908,6 +1987,7 @@ default_imp_for_new_connector_integration_webhook_source_verification!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -1958,6 +2038,7 @@ macro_rules! default_imp_for_new_connector_integration_frm_sale {
 default_imp_for_new_connector_integration_frm_sale!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -1981,6 +2062,7 @@ default_imp_for_new_connector_integration_frm_sale!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -1991,6 +2073,7 @@ default_imp_for_new_connector_integration_frm_sale!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -2002,6 +2085,7 @@ default_imp_for_new_connector_integration_frm_sale!(
     connectors::Nomupay,
     connectors::Noon,
     connectors::Novalnet,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Nmi,
@@ -2016,6 +2100,7 @@ default_imp_for_new_connector_integration_frm_sale!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -2066,6 +2151,7 @@ macro_rules! default_imp_for_new_connector_integration_frm_checkout {
 default_imp_for_new_connector_integration_frm_checkout!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -2089,6 +2175,7 @@ default_imp_for_new_connector_integration_frm_checkout!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -2099,6 +2186,7 @@ default_imp_for_new_connector_integration_frm_checkout!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -2110,6 +2198,7 @@ default_imp_for_new_connector_integration_frm_checkout!(
     connectors::Nomupay,
     connectors::Noon,
     connectors::Novalnet,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Nmi,
@@ -2124,6 +2213,7 @@ default_imp_for_new_connector_integration_frm_checkout!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -2174,6 +2264,7 @@ macro_rules! default_imp_for_new_connector_integration_frm_transaction {
 default_imp_for_new_connector_integration_frm_transaction!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -2197,6 +2288,7 @@ default_imp_for_new_connector_integration_frm_transaction!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -2207,6 +2299,7 @@ default_imp_for_new_connector_integration_frm_transaction!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -2218,6 +2311,7 @@ default_imp_for_new_connector_integration_frm_transaction!(
     connectors::Nomupay,
     connectors::Noon,
     connectors::Novalnet,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Nmi,
@@ -2232,6 +2326,7 @@ default_imp_for_new_connector_integration_frm_transaction!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -2282,6 +2377,7 @@ macro_rules! default_imp_for_new_connector_integration_frm_fulfillment {
 default_imp_for_new_connector_integration_frm_fulfillment!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -2305,6 +2401,7 @@ default_imp_for_new_connector_integration_frm_fulfillment!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -2315,6 +2412,7 @@ default_imp_for_new_connector_integration_frm_fulfillment!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -2326,6 +2424,7 @@ default_imp_for_new_connector_integration_frm_fulfillment!(
     connectors::Nomupay,
     connectors::Noon,
     connectors::Novalnet,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Nmi,
@@ -2340,6 +2439,7 @@ default_imp_for_new_connector_integration_frm_fulfillment!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -2390,6 +2490,7 @@ macro_rules! default_imp_for_new_connector_integration_frm_record_return {
 default_imp_for_new_connector_integration_frm_record_return!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -2413,6 +2514,7 @@ default_imp_for_new_connector_integration_frm_record_return!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -2423,6 +2525,7 @@ default_imp_for_new_connector_integration_frm_record_return!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -2434,6 +2537,7 @@ default_imp_for_new_connector_integration_frm_record_return!(
     connectors::Nomupay,
     connectors::Noon,
     connectors::Novalnet,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Nmi,
@@ -2448,6 +2552,7 @@ default_imp_for_new_connector_integration_frm_record_return!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -2495,6 +2600,7 @@ macro_rules! default_imp_for_new_connector_integration_revoking_mandates {
 default_imp_for_new_connector_integration_revoking_mandates!(
     connectors::Aci,
     connectors::Adyen,
+    connectors::Adyenplatform,
     connectors::Airwallex,
     connectors::Amazonpay,
     connectors::Authorizedotnet,
@@ -2518,6 +2624,7 @@ default_imp_for_new_connector_integration_revoking_mandates!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -2528,6 +2635,7 @@ default_imp_for_new_connector_integration_revoking_mandates!(
     connectors::Globalpay,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Hipay,
     connectors::Helcim,
     connectors::Iatapay,
@@ -2539,6 +2647,7 @@ default_imp_for_new_connector_integration_revoking_mandates!(
     connectors::Nomupay,
     connectors::Noon,
     connectors::Novalnet,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Nmi,
@@ -2552,6 +2661,7 @@ default_imp_for_new_connector_integration_revoking_mandates!(
     connectors::Paystack,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mifinity,
@@ -2608,6 +2718,7 @@ default_imp_for_new_connector_integration_frm!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -2617,12 +2728,14 @@ default_imp_for_new_connector_integration_frm!(
     connectors::Globepay,
     connectors::Hipay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Helcim,
     connectors::Inespay,
     connectors::Jpmorgan,
     connectors::Juspaythreedsserver,
     connectors::Nomupay,
     connectors::Novalnet,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Nmi,
@@ -2631,6 +2744,7 @@ default_imp_for_new_connector_integration_frm!(
     connectors::Payeezy,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mollie,
@@ -2715,6 +2829,7 @@ default_imp_for_new_connector_integration_connector_authentication!(
     connectors::Deutschebank,
     connectors::Digitalvirgo,
     connectors::Dlocal,
+    connectors::Ebanx,
     connectors::Elavon,
     connectors::Facilitapay,
     connectors::Fiserv,
@@ -2723,6 +2838,7 @@ default_imp_for_new_connector_integration_connector_authentication!(
     connectors::Forte,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Helcim,
     connectors::Hipay,
     connectors::Inespay,
@@ -2730,12 +2846,14 @@ default_imp_for_new_connector_integration_connector_authentication!(
     connectors::Juspaythreedsserver,
     connectors::Nomupay,
     connectors::Novalnet,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Paybox,
     connectors::Payeezy,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mollie,
@@ -2812,6 +2930,7 @@ default_imp_for_new_connector_integration_revenue_recovery!(
     connectors::Digitalvirgo,
     connectors::Dlocal,
     connectors::Elavon,
+    connectors::Ebanx,
     connectors::Facilitapay,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -2819,6 +2938,7 @@ default_imp_for_new_connector_integration_revenue_recovery!(
     connectors::Forte,
     connectors::Globepay,
     connectors::Gocardless,
+    connectors::Gpayments,
     connectors::Helcim,
     connectors::Hipay,
     connectors::Inespay,
@@ -2826,6 +2946,7 @@ default_imp_for_new_connector_integration_revenue_recovery!(
     connectors::Juspaythreedsserver,
     connectors::Nomupay,
     connectors::Novalnet,
+    connectors::Netcetera,
     connectors::Nexinets,
     connectors::Nexixpay,
     connectors::Nmi,
@@ -2834,6 +2955,7 @@ default_imp_for_new_connector_integration_revenue_recovery!(
     connectors::Payeezy,
     connectors::Payu,
     connectors::Placetopay,
+    connectors::Plaid,
     connectors::Powertranz,
     connectors::Prophetpay,
     connectors::Mollie,
diff --git a/crates/hyperswitch_connectors/src/types.rs b/crates/hyperswitch_connectors/src/types.rs
index 4a36f22cb99..79c032a8dae 100644
--- a/crates/hyperswitch_connectors/src/types.rs
+++ b/crates/hyperswitch_connectors/src/types.rs
@@ -1,26 +1,39 @@
+#[cfg(feature = "v2")]
+use hyperswitch_domain_models::router_data_v2::RouterDataV2;
 #[cfg(feature = "payouts")]
 use hyperswitch_domain_models::types::{PayoutsData, PayoutsResponseData};
 use hyperswitch_domain_models::{
     router_data::{AccessToken, RouterData},
-    router_data_v2::RouterDataV2,
     router_flow_types::{
-        Accept, AccessTokenAuth, Authorize, Capture, Checkout, Defend, Evidence, Fulfillment,
-        PSync, PreProcessing, Session, Transaction, Upload, Void,
+        authentication::{
+            Authentication, PostAuthentication, PreAuthentication, PreAuthenticationVersionCall,
+        },
+        Accept, AccessTokenAuth, Authorize, Capture, Defend, Evidence, PSync, PostProcessing,
+        PreProcessing, Session, Upload, Void,
     },
     router_request_types::{
-        fraud_check::{
-            FraudCheckCheckoutData, FraudCheckFulfillmentData, FraudCheckTransactionData,
+        authentication::{
+            ConnectorAuthenticationRequestData, ConnectorPostAuthenticationRequestData,
+            PreAuthNRequestData,
         },
         AcceptDisputeRequestData, AccessTokenRequestData, DefendDisputeRequestData,
-        PaymentsAuthorizeData, PaymentsCancelData, PaymentsCaptureData, PaymentsPreProcessingData,
-        PaymentsSessionData, PaymentsSyncData, RefundsData, SubmitEvidenceRequestData,
-        UploadFileRequestData,
+        PaymentsAuthorizeData, PaymentsCancelData, PaymentsCaptureData, PaymentsPostProcessingData,
+        PaymentsPreProcessingData, PaymentsSessionData, PaymentsSyncData, RefundsData,
+        SubmitEvidenceRequestData, UploadFileRequestData,
     },
     router_response_types::{
-        fraud_check::FraudCheckResponseData, AcceptDisputeResponse, DefendDisputeResponse,
+        AcceptDisputeResponse, AuthenticationResponseData, DefendDisputeResponse,
         PaymentsResponseData, RefundsResponseData, SubmitEvidenceResponse, UploadFileResponse,
     },
 };
+#[cfg(feature = "frm")]
+use hyperswitch_domain_models::{
+    router_flow_types::{Checkout, Fulfillment, Transaction},
+    router_request_types::fraud_check::{
+        FraudCheckCheckoutData, FraudCheckFulfillmentData, FraudCheckTransactionData,
+    },
+    router_response_types::fraud_check::FraudCheckResponseData,
+};
 use hyperswitch_interfaces::api::ConnectorIntegration;
 
 pub(crate) type PaymentsSyncResponseRouterData<R> =
@@ -51,30 +64,68 @@ pub(crate) type DefendDisputeRouterData =
     RouterData<Defend, DefendDisputeRequestData, DefendDisputeResponse>;
 
 #[cfg(feature = "payouts")]
-pub type PayoutsResponseRouterData<F, R> =
+pub(crate) type PayoutsResponseRouterData<F, R> =
     ResponseRouterData<F, R, PayoutsData, PayoutsResponseData>;
 
 // TODO: Remove `ResponseRouterData` from router crate after all the related type aliases are moved to this crate.
-pub struct ResponseRouterData<Flow, R, Request, Response> {
-    pub response: R,
-    pub data: RouterData<Flow, Request, Response>,
-    pub http_code: u16,
+pub(crate) struct ResponseRouterData<Flow, R, Request, Response> {
+    pub(crate) response: R,
+    pub(crate) data: RouterData<Flow, Request, Response>,
+    pub(crate) http_code: u16,
 }
-pub type FrmFulfillmentRouterData =
+#[cfg(feature = "frm")]
+pub(crate) type FrmFulfillmentRouterData =
     RouterData<Fulfillment, FraudCheckFulfillmentData, FraudCheckResponseData>;
-pub type FrmCheckoutType =
+#[cfg(feature = "frm")]
+pub(crate) type FrmCheckoutType =
     dyn ConnectorIntegration<Checkout, FraudCheckCheckoutData, FraudCheckResponseData>;
-pub type FrmTransactionType =
+#[cfg(feature = "frm")]
+pub(crate) type FrmTransactionType =
     dyn ConnectorIntegration<Transaction, FraudCheckTransactionData, FraudCheckResponseData>;
-pub type FrmTransactionRouterData =
+#[cfg(feature = "frm")]
+pub(crate) type FrmTransactionRouterData =
     RouterData<Transaction, FraudCheckTransactionData, FraudCheckResponseData>;
-pub type FrmFulfillmentType =
+#[cfg(feature = "frm")]
+pub(crate) type FrmFulfillmentType =
     dyn ConnectorIntegration<Fulfillment, FraudCheckFulfillmentData, FraudCheckResponseData>;
-pub type FrmCheckoutRouterData =
+#[cfg(feature = "frm")]
+pub(crate) type FrmCheckoutRouterData =
     RouterData<Checkout, FraudCheckCheckoutData, FraudCheckResponseData>;
-
-pub struct ResponseRouterDataV2<Flow, R, ResourceCommonData, Request, Response> {
+#[cfg(feature = "v2")]
+pub(crate) struct ResponseRouterDataV2<Flow, R, ResourceCommonData, Request, Response> {
     pub response: R,
     pub data: RouterDataV2<Flow, ResourceCommonData, Request, Response>,
     pub http_code: u16,
 }
+
+pub(crate) type PreAuthNRouterData =
+    RouterData<PreAuthentication, PreAuthNRequestData, AuthenticationResponseData>;
+pub(crate) type PreAuthNVersionCallRouterData =
+    RouterData<PreAuthenticationVersionCall, PreAuthNRequestData, AuthenticationResponseData>;
+pub(crate) type ConnectorAuthenticationRouterData =
+    RouterData<Authentication, ConnectorAuthenticationRequestData, AuthenticationResponseData>;
+pub(crate) type ConnectorPostAuthenticationRouterData = RouterData<
+    PostAuthentication,
+    ConnectorPostAuthenticationRequestData,
+    AuthenticationResponseData,
+>;
+pub(crate) type ConnectorAuthenticationType = dyn ConnectorIntegration<
+    Authentication,
+    ConnectorAuthenticationRequestData,
+    AuthenticationResponseData,
+>;
+pub(crate) type ConnectorPostAuthenticationType = dyn ConnectorIntegration<
+    PostAuthentication,
+    ConnectorPostAuthenticationRequestData,
+    AuthenticationResponseData,
+>;
+pub(crate) type ConnectorPreAuthenticationType =
+    dyn ConnectorIntegration<PreAuthentication, PreAuthNRequestData, AuthenticationResponseData>;
+pub(crate) type ConnectorPreAuthenticationVersionCallType = dyn ConnectorIntegration<
+    PreAuthenticationVersionCall,
+    PreAuthNRequestData,
+    AuthenticationResponseData,
+>;
+
+pub(crate) type PaymentsPostProcessingRouterData =
+    RouterData<PostProcessing, PaymentsPostProcessingData, PaymentsResponseData>;
diff --git a/crates/hyperswitch_connectors/src/utils.rs b/crates/hyperswitch_connectors/src/utils.rs
index a3ccc73c183..216b096b7a7 100644
--- a/crates/hyperswitch_connectors/src/utils.rs
+++ b/crates/hyperswitch_connectors/src/utils.rs
@@ -6220,3 +6220,75 @@ where
         _ => Ok(None),
     }
 }
+#[cfg(feature = "payouts")]
+pub trait CustomerDetails {
+    fn get_customer_id(&self) -> Result<id_type::CustomerId, errors::ConnectorError>;
+    fn get_customer_name(
+        &self,
+    ) -> Result<Secret<String, masking::WithType>, errors::ConnectorError>;
+    fn get_customer_email(&self) -> Result<Email, errors::ConnectorError>;
+    fn get_customer_phone(
+        &self,
+    ) -> Result<Secret<String, masking::WithType>, errors::ConnectorError>;
+    fn get_customer_phone_country_code(&self) -> Result<String, errors::ConnectorError>;
+}
+
+#[cfg(feature = "payouts")]
+impl CustomerDetails for hyperswitch_domain_models::router_request_types::CustomerDetails {
+    fn get_customer_id(&self) -> Result<id_type::CustomerId, errors::ConnectorError> {
+        self.customer_id
+            .clone()
+            .ok_or(errors::ConnectorError::MissingRequiredField {
+                field_name: "customer_id",
+            })
+    }
+
+    fn get_customer_name(
+        &self,
+    ) -> Result<Secret<String, masking::WithType>, errors::ConnectorError> {
+        self.name
+            .clone()
+            .ok_or(errors::ConnectorError::MissingRequiredField {
+                field_name: "customer_name",
+            })
+    }
+
+    fn get_customer_email(&self) -> Result<Email, errors::ConnectorError> {
+        self.email
+            .clone()
+            .ok_or(errors::ConnectorError::MissingRequiredField {
+                field_name: "customer_email",
+            })
+    }
+
+    fn get_customer_phone(
+        &self,
+    ) -> Result<Secret<String, masking::WithType>, errors::ConnectorError> {
+        self.phone
+            .clone()
+            .ok_or(errors::ConnectorError::MissingRequiredField {
+                field_name: "customer_phone",
+            })
+    }
+
+    fn get_customer_phone_country_code(&self) -> Result<String, errors::ConnectorError> {
+        self.phone_country_code
+            .clone()
+            .ok_or(errors::ConnectorError::MissingRequiredField {
+                field_name: "customer_phone_country_code",
+            })
+    }
+}
+
+pub fn get_card_details(
+    payment_method_data: PaymentMethodData,
+    connector_name: &'static str,
+) -> Result<Card, errors::ConnectorError> {
+    match payment_method_data {
+        PaymentMethodData::Card(details) => Ok(details),
+        _ => Err(errors::ConnectorError::NotSupported {
+            message: SELECTED_PAYMENT_METHOD.to_string(),
+            connector: connector_name,
+        })?,
+    }
+}
diff --git a/crates/router/Cargo.toml b/crates/router/Cargo.toml
index 46f63abf501..e80b9672f23 100644
--- a/crates/router/Cargo.toml
+++ b/crates/router/Cargo.toml
@@ -115,7 +115,6 @@ tokio = { version = "1.37.0", features = ["macros", "rt-multi-thread"] }
 totp-rs = { version = "5.5.1", features = ["gen_secret", "otpauth"] }
 tracing-futures = { version = "0.2.5", features = ["tokio"] }
 unicode-segmentation = "1.11.0"
-unidecode = "0.3.0"
 url = { version = "2.5.0", features = ["serde"] }
 urlencoding = "2.1.3"
 utoipa = { version = "4.2.0", features = ["preserve_order", "preserve_path_order", "time"] }
diff --git a/crates/router/src/connector.rs b/crates/router/src/connector.rs
index e78c64d6fe9..e5a91afc78b 100644
--- a/crates/router/src/connector.rs
+++ b/crates/router/src/connector.rs
@@ -1,10 +1,5 @@
-pub mod adyenplatform;
 #[cfg(feature = "dummy_connector")]
 pub mod dummyconnector;
-pub mod ebanx;
-pub mod gpayments;
-pub mod netcetera;
-pub mod plaid;
 pub mod signifyd;
 pub mod stripe;
 pub mod threedsecureio;
@@ -13,33 +8,35 @@ pub mod wellsfargopayout;
 pub mod wise;
 
 pub use hyperswitch_connectors::connectors::{
-    aci, aci::Aci, adyen, adyen::Adyen, airwallex, airwallex::Airwallex, amazonpay,
-    amazonpay::Amazonpay, authorizedotnet, authorizedotnet::Authorizedotnet, bambora,
-    bambora::Bambora, bamboraapac, bamboraapac::Bamboraapac, bankofamerica,
-    bankofamerica::Bankofamerica, billwerk, billwerk::Billwerk, bitpay, bitpay::Bitpay, bluesnap,
-    bluesnap::Bluesnap, boku, boku::Boku, braintree, braintree::Braintree, cashtocode,
-    cashtocode::Cashtocode, chargebee::Chargebee, checkout, checkout::Checkout, coinbase,
-    coinbase::Coinbase, coingate, coingate::Coingate, cryptopay, cryptopay::Cryptopay,
-    ctp_mastercard, ctp_mastercard::CtpMastercard, cybersource, cybersource::Cybersource,
-    datatrans, datatrans::Datatrans, deutschebank, deutschebank::Deutschebank, digitalvirgo,
-    digitalvirgo::Digitalvirgo, dlocal, dlocal::Dlocal, elavon, elavon::Elavon, facilitapay,
-    facilitapay::Facilitapay, fiserv, fiserv::Fiserv, fiservemea, fiservemea::Fiservemea, fiuu,
-    fiuu::Fiuu, forte, forte::Forte, getnet, getnet::Getnet, globalpay, globalpay::Globalpay,
-    globepay, globepay::Globepay, gocardless, gocardless::Gocardless, helcim, helcim::Helcim,
-    hipay, hipay::Hipay, iatapay, iatapay::Iatapay, inespay, inespay::Inespay, itaubank,
+    aci, aci::Aci, adyen, adyen::Adyen, adyenplatform, adyenplatform::Adyenplatform, airwallex,
+    airwallex::Airwallex, amazonpay, amazonpay::Amazonpay, authorizedotnet,
+    authorizedotnet::Authorizedotnet, bambora, bambora::Bambora, bamboraapac,
+    bamboraapac::Bamboraapac, bankofamerica, bankofamerica::Bankofamerica, billwerk,
+    billwerk::Billwerk, bitpay, bitpay::Bitpay, bluesnap, bluesnap::Bluesnap, boku, boku::Boku,
+    braintree, braintree::Braintree, cashtocode, cashtocode::Cashtocode, chargebee,
+    chargebee::Chargebee, checkout, checkout::Checkout, coinbase, coinbase::Coinbase, coingate,
+    coingate::Coingate, cryptopay, cryptopay::Cryptopay, ctp_mastercard,
+    ctp_mastercard::CtpMastercard, cybersource, cybersource::Cybersource, datatrans,
+    datatrans::Datatrans, deutschebank, deutschebank::Deutschebank, digitalvirgo,
+    digitalvirgo::Digitalvirgo, dlocal, dlocal::Dlocal, ebanx, ebanx::Ebanx, elavon,
+    elavon::Elavon, facilitapay, facilitapay::Facilitapay, fiserv, fiserv::Fiserv, fiservemea,
+    fiservemea::Fiservemea, fiuu, fiuu::Fiuu, forte, forte::Forte, getnet, getnet::Getnet,
+    globalpay, globalpay::Globalpay, globepay, globepay::Globepay, gocardless,
+    gocardless::Gocardless, gpayments, gpayments::Gpayments, helcim, helcim::Helcim, hipay,
+    hipay::Hipay, iatapay, iatapay::Iatapay, inespay, inespay::Inespay, itaubank,
     itaubank::Itaubank, jpmorgan, jpmorgan::Jpmorgan, juspaythreedsserver,
     juspaythreedsserver::Juspaythreedsserver, klarna, klarna::Klarna, mifinity, mifinity::Mifinity,
     mollie, mollie::Mollie, moneris, moneris::Moneris, multisafepay, multisafepay::Multisafepay,
-    nexinets, nexinets::Nexinets, nexixpay, nexixpay::Nexixpay, nmi, nmi::Nmi, nomupay,
-    nomupay::Nomupay, noon, noon::Noon, novalnet, novalnet::Novalnet, nuvei, nuvei::Nuvei, opayo,
-    opayo::Opayo, opennode, opennode::Opennode, paybox, paybox::Paybox, payeezy, payeezy::Payeezy,
-    payme, payme::Payme, payone, payone::Payone, paypal, paypal::Paypal, paystack,
-    paystack::Paystack, payu, payu::Payu, placetopay, placetopay::Placetopay, powertranz,
-    powertranz::Powertranz, prophetpay, prophetpay::Prophetpay, rapyd, rapyd::Rapyd, razorpay,
-    razorpay::Razorpay, recurly::Recurly, redsys, redsys::Redsys, riskified, riskified::Riskified,
-    shift4, shift4::Shift4, square, square::Square, stax, stax::Stax, stripebilling,
-    stripebilling::Stripebilling, taxjar, taxjar::Taxjar, thunes, thunes::Thunes, trustpay,
-    trustpay::Trustpay, tsys, tsys::Tsys, unified_authentication_service,
+    netcetera, netcetera::Netcetera, nexinets, nexinets::Nexinets, nexixpay, nexixpay::Nexixpay,
+    nmi, nmi::Nmi, nomupay, nomupay::Nomupay, noon, noon::Noon, novalnet, novalnet::Novalnet,
+    nuvei, nuvei::Nuvei, opayo, opayo::Opayo, opennode, opennode::Opennode, paybox, paybox::Paybox,
+    payeezy, payeezy::Payeezy, payme, payme::Payme, payone, payone::Payone, paypal, paypal::Paypal,
+    paystack, paystack::Paystack, payu, payu::Payu, placetopay, placetopay::Placetopay, plaid,
+    plaid::Plaid, powertranz, powertranz::Powertranz, prophetpay, prophetpay::Prophetpay, rapyd,
+    rapyd::Rapyd, razorpay, razorpay::Razorpay, recurly, recurly::Recurly, redsys, redsys::Redsys,
+    riskified, riskified::Riskified, shift4, shift4::Shift4, square, square::Square, stax,
+    stax::Stax, stripebilling, stripebilling::Stripebilling, taxjar, taxjar::Taxjar, thunes,
+    thunes::Thunes, trustpay, trustpay::Trustpay, tsys, tsys::Tsys, unified_authentication_service,
     unified_authentication_service::UnifiedAuthenticationService, volt, volt::Volt, wellsfargo,
     wellsfargo::Wellsfargo, worldline, worldline::Worldline, worldpay, worldpay::Worldpay, xendit,
     xendit::Xendit, zen, zen::Zen, zsl, zsl::Zsl,
@@ -48,7 +45,6 @@ pub use hyperswitch_connectors::connectors::{
 #[cfg(feature = "dummy_connector")]
 pub use self::dummyconnector::DummyConnector;
 pub use self::{
-    adyenplatform::Adyenplatform, ebanx::Ebanx, gpayments::Gpayments, netcetera::Netcetera,
-    plaid::Plaid, signifyd::Signifyd, stripe::Stripe, threedsecureio::Threedsecureio,
+    signifyd::Signifyd, stripe::Stripe, threedsecureio::Threedsecureio,
     wellsfargopayout::Wellsfargopayout, wise::Wise,
 };
diff --git a/crates/router/src/connector/ebanx.rs b/crates/router/src/connector/ebanx.rs
deleted file mode 100644
index 50e336daf21..00000000000
--- a/crates/router/src/connector/ebanx.rs
+++ /dev/null
@@ -1,473 +0,0 @@
-pub mod transformers;
-
-#[cfg(feature = "payouts")]
-use common_utils::request::RequestContent;
-#[cfg(feature = "payouts")]
-use common_utils::types::{AmountConvertor, FloatMajorUnit, FloatMajorUnitForConnector};
-use error_stack::{report, ResultExt};
-#[cfg(feature = "payouts")]
-use router_env::{instrument, tracing};
-use transformers as ebanx;
-
-#[cfg(feature = "payouts")]
-use crate::connector::utils::convert_amount;
-use crate::{
-    configs::settings,
-    core::errors::{self, CustomResult},
-    events::connector_api_logs::ConnectorEvent,
-    services::{ConnectorIntegration, ConnectorSpecifications, ConnectorValidation},
-    types::{
-        self,
-        api::{self, ConnectorCommon, ConnectorCommonExt},
-    },
-    utils::BytesExt,
-};
-#[cfg(feature = "payouts")]
-use crate::{
-    headers,
-    services::{self, request},
-};
-#[derive(Clone)]
-pub struct Ebanx {
-    #[cfg(feature = "payouts")]
-    amount_converter: &'static (dyn AmountConvertor<Output = FloatMajorUnit> + Sync),
-}
-
-impl Ebanx {
-    pub fn new() -> &'static Self {
-        &Self {
-            #[cfg(feature = "payouts")]
-            amount_converter: &FloatMajorUnitForConnector,
-        }
-    }
-}
-
-impl api::Payment for Ebanx {}
-impl api::PaymentSession for Ebanx {}
-impl api::ConnectorAccessToken for Ebanx {}
-impl api::MandateSetup for Ebanx {}
-impl api::PaymentAuthorize for Ebanx {}
-impl api::PaymentSync for Ebanx {}
-impl api::PaymentCapture for Ebanx {}
-impl api::PaymentVoid for Ebanx {}
-impl api::Refund for Ebanx {}
-impl api::RefundExecute for Ebanx {}
-impl api::RefundSync for Ebanx {}
-impl api::PaymentToken for Ebanx {}
-
-impl api::Payouts for Ebanx {}
-#[cfg(feature = "payouts")]
-impl api::PayoutCancel for Ebanx {}
-#[cfg(feature = "payouts")]
-impl api::PayoutCreate for Ebanx {}
-#[cfg(feature = "payouts")]
-impl api::PayoutEligibility for Ebanx {}
-#[cfg(feature = "payouts")]
-impl api::PayoutQuote for Ebanx {}
-#[cfg(feature = "payouts")]
-impl api::PayoutRecipient for Ebanx {}
-#[cfg(feature = "payouts")]
-impl api::PayoutFulfill for Ebanx {}
-
-impl<Flow, Request, Response> ConnectorCommonExt<Flow, Request, Response> for Ebanx
-where
-    Self: ConnectorIntegration<Flow, Request, Response>,
-{
-    #[cfg(feature = "payouts")]
-    fn build_headers(
-        &self,
-        _req: &types::RouterData<Flow, Request, Response>,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
-        let header = vec![(
-            headers::CONTENT_TYPE.to_string(),
-            self.common_get_content_type().to_string().into(),
-        )];
-        Ok(header)
-    }
-}
-
-impl ConnectorCommon for Ebanx {
-    fn id(&self) -> &'static str {
-        "ebanx"
-    }
-
-    fn get_currency_unit(&self) -> api::CurrencyUnit {
-        api::CurrencyUnit::Base
-    }
-
-    fn common_get_content_type(&self) -> &'static str {
-        "application/json"
-    }
-
-    fn base_url<'a>(&self, connectors: &'a settings::Connectors) -> &'a str {
-        connectors.ebanx.base_url.as_ref()
-    }
-
-    fn build_error_response(
-        &self,
-        res: types::Response,
-        event_builder: Option<&mut ConnectorEvent>,
-    ) -> CustomResult<types::ErrorResponse, errors::ConnectorError> {
-        let response: ebanx::EbanxErrorResponse =
-            res.response
-                .parse_struct("EbanxErrorResponse")
-                .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
-
-        event_builder.map(|i| i.set_response_body(&response));
-        router_env::logger::info!(connector_response=?response);
-
-        Ok(types::ErrorResponse {
-            status_code: res.status_code,
-            code: response.status_code,
-            message: response.code,
-            reason: response.message,
-            attempt_status: None,
-            connector_transaction_id: None,
-            network_advice_code: None,
-            network_decline_code: None,
-            network_error_message: None,
-        })
-    }
-}
-
-#[cfg(feature = "payouts")]
-impl ConnectorIntegration<api::PoCreate, types::PayoutsData, types::PayoutsResponseData> for Ebanx {
-    fn get_url(
-        &self,
-        _req: &types::PayoutsRouterData<api::PoCreate>,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<String, errors::ConnectorError> {
-        Ok(format!("{}ws/payout/create", connectors.ebanx.base_url))
-    }
-
-    fn get_headers(
-        &self,
-        req: &types::PayoutsRouterData<api::PoCreate>,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
-        self.build_headers(req, connectors)
-    }
-
-    fn get_request_body(
-        &self,
-        req: &types::PayoutsRouterData<api::PoCreate>,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<RequestContent, errors::ConnectorError> {
-        let amount = convert_amount(
-            self.amount_converter,
-            req.request.minor_amount,
-            req.request.source_currency,
-        )?;
-        let connector_router_data = ebanx::EbanxRouterData::from((amount, req));
-        let connector_req = ebanx::EbanxPayoutCreateRequest::try_from(&connector_router_data)?;
-        Ok(RequestContent::Json(Box::new(connector_req)))
-    }
-
-    fn build_request(
-        &self,
-        req: &types::PayoutsRouterData<api::PoCreate>,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
-        let request = services::RequestBuilder::new()
-            .method(services::Method::Post)
-            .url(&types::PayoutCreateType::get_url(self, req, connectors)?)
-            .attach_default_headers()
-            .headers(types::PayoutCreateType::get_headers(self, req, connectors)?)
-            .set_body(types::PayoutCreateType::get_request_body(
-                self, req, connectors,
-            )?)
-            .build();
-
-        Ok(Some(request))
-    }
-
-    fn handle_response(
-        &self,
-        data: &types::PayoutsRouterData<api::PoCreate>,
-        event_builder: Option<&mut ConnectorEvent>,
-        res: types::Response,
-    ) -> CustomResult<types::PayoutsRouterData<api::PoCreate>, errors::ConnectorError> {
-        let response: ebanx::EbanxPayoutResponse = res
-            .response
-            .parse_struct("EbanxPayoutResponse")
-            .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
-
-        event_builder.map(|i| i.set_response_body(&response));
-        router_env::logger::info!(connector_response=?response);
-
-        types::RouterData::try_from(types::ResponseRouterData {
-            response,
-            data: data.clone(),
-            http_code: res.status_code,
-        })
-    }
-
-    fn get_error_response(
-        &self,
-        res: types::Response,
-        event_builder: Option<&mut ConnectorEvent>,
-    ) -> CustomResult<types::ErrorResponse, errors::ConnectorError> {
-        self.build_error_response(res, event_builder)
-    }
-}
-
-#[cfg(feature = "payouts")]
-impl ConnectorIntegration<api::PoFulfill, types::PayoutsData, types::PayoutsResponseData>
-    for Ebanx
-{
-    fn get_url(
-        &self,
-        _req: &types::PayoutsRouterData<api::PoFulfill>,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<String, errors::ConnectorError> {
-        Ok(format!("{}ws/payout/commit", connectors.ebanx.base_url,))
-    }
-
-    fn get_headers(
-        &self,
-        req: &types::PayoutsRouterData<api::PoFulfill>,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
-        self.build_headers(req, connectors)
-    }
-
-    fn get_request_body(
-        &self,
-        req: &types::PayoutsRouterData<api::PoFulfill>,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<RequestContent, errors::ConnectorError> {
-        let amount = convert_amount(
-            self.amount_converter,
-            req.request.minor_amount,
-            req.request.source_currency,
-        )?;
-        let connector_router_data = ebanx::EbanxRouterData::from((amount, req));
-        let connector_req = ebanx::EbanxPayoutFulfillRequest::try_from(&connector_router_data)?;
-        Ok(RequestContent::Json(Box::new(connector_req)))
-    }
-
-    fn build_request(
-        &self,
-        req: &types::PayoutsRouterData<api::PoFulfill>,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
-        let request = services::RequestBuilder::new()
-            .method(services::Method::Post)
-            .url(&types::PayoutFulfillType::get_url(self, req, connectors)?)
-            .attach_default_headers()
-            .headers(types::PayoutFulfillType::get_headers(
-                self, req, connectors,
-            )?)
-            .set_body(types::PayoutFulfillType::get_request_body(
-                self, req, connectors,
-            )?)
-            .build();
-
-        Ok(Some(request))
-    }
-
-    #[instrument(skip_all)]
-    fn handle_response(
-        &self,
-        data: &types::PayoutsRouterData<api::PoFulfill>,
-        event_builder: Option<&mut ConnectorEvent>,
-        res: types::Response,
-    ) -> CustomResult<types::PayoutsRouterData<api::PoFulfill>, errors::ConnectorError> {
-        let response: ebanx::EbanxFulfillResponse = res
-            .response
-            .parse_struct("EbanxFulfillResponse")
-            .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
-
-        event_builder.map(|i| i.set_response_body(&response));
-        router_env::logger::info!(connector_response=?response);
-
-        types::RouterData::try_from(types::ResponseRouterData {
-            response,
-            data: data.clone(),
-            http_code: res.status_code,
-        })
-    }
-
-    fn get_error_response(
-        &self,
-        res: types::Response,
-        event_builder: Option<&mut ConnectorEvent>,
-    ) -> CustomResult<types::ErrorResponse, errors::ConnectorError> {
-        self.build_error_response(res, event_builder)
-    }
-}
-
-#[cfg(feature = "payouts")]
-impl ConnectorIntegration<api::PoCancel, types::PayoutsData, types::PayoutsResponseData> for Ebanx {
-    fn get_url(
-        &self,
-        _req: &types::PayoutsRouterData<api::PoCancel>,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<String, errors::ConnectorError> {
-        Ok(format!("{}ws/payout/cancel", connectors.ebanx.base_url,))
-    }
-
-    fn get_headers(
-        &self,
-        req: &types::PayoutsRouterData<api::PoCancel>,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
-        self.build_headers(req, _connectors)
-    }
-
-    fn get_request_body(
-        &self,
-        req: &types::PayoutsRouterData<api::PoCancel>,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<RequestContent, errors::ConnectorError> {
-        let connector_req = ebanx::EbanxPayoutCancelRequest::try_from(req)?;
-        Ok(RequestContent::Json(Box::new(connector_req)))
-    }
-
-    fn build_request(
-        &self,
-        req: &types::PayoutsRouterData<api::PoCancel>,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
-        let request = services::RequestBuilder::new()
-            .method(services::Method::Put)
-            .url(&types::PayoutCancelType::get_url(self, req, connectors)?)
-            .attach_default_headers()
-            .headers(types::PayoutCancelType::get_headers(self, req, connectors)?)
-            .set_body(types::PayoutCancelType::get_request_body(
-                self, req, connectors,
-            )?)
-            .build();
-
-        Ok(Some(request))
-    }
-
-    #[instrument(skip_all)]
-    fn handle_response(
-        &self,
-        data: &types::PayoutsRouterData<api::PoCancel>,
-        event_builder: Option<&mut ConnectorEvent>,
-        res: types::Response,
-    ) -> CustomResult<types::PayoutsRouterData<api::PoCancel>, errors::ConnectorError> {
-        let response: ebanx::EbanxCancelResponse = res
-            .response
-            .parse_struct("EbanxCancelResponse")
-            .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
-
-        event_builder.map(|i| i.set_response_body(&response));
-        router_env::logger::info!(connector_response=?response);
-
-        types::RouterData::try_from(types::ResponseRouterData {
-            response,
-            data: data.clone(),
-            http_code: res.status_code,
-        })
-    }
-
-    fn get_error_response(
-        &self,
-        res: types::Response,
-        event_builder: Option<&mut ConnectorEvent>,
-    ) -> CustomResult<types::ErrorResponse, errors::ConnectorError> {
-        self.build_error_response(res, event_builder)
-    }
-}
-
-#[cfg(feature = "payouts")]
-impl ConnectorIntegration<api::PoQuote, types::PayoutsData, types::PayoutsResponseData> for Ebanx {}
-
-#[cfg(feature = "payouts")]
-impl ConnectorIntegration<api::PoRecipient, types::PayoutsData, types::PayoutsResponseData>
-    for Ebanx
-{
-}
-
-#[cfg(feature = "payouts")]
-impl ConnectorIntegration<api::PoEligibility, types::PayoutsData, types::PayoutsResponseData>
-    for Ebanx
-{
-}
-
-impl
-    ConnectorIntegration<
-        api::PaymentMethodToken,
-        types::PaymentMethodTokenizationData,
-        types::PaymentsResponseData,
-    > for Ebanx
-{
-    // Not Implemented (R)
-}
-
-impl ConnectorValidation for Ebanx {
-    //TODO: implement functions when support enabled
-}
-
-impl ConnectorIntegration<api::Session, types::PaymentsSessionData, types::PaymentsResponseData>
-    for Ebanx
-{
-    //TODO: implement sessions flow
-}
-
-impl ConnectorIntegration<api::AccessTokenAuth, types::AccessTokenRequestData, types::AccessToken>
-    for Ebanx
-{
-}
-
-impl
-    ConnectorIntegration<
-        api::SetupMandate,
-        types::SetupMandateRequestData,
-        types::PaymentsResponseData,
-    > for Ebanx
-{
-}
-
-impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::PaymentsResponseData>
-    for Ebanx
-{
-}
-
-impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsResponseData>
-    for Ebanx
-{
-}
-
-impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::PaymentsResponseData>
-    for Ebanx
-{
-}
-
-impl ConnectorIntegration<api::Void, types::PaymentsCancelData, types::PaymentsResponseData>
-    for Ebanx
-{
-}
-
-impl ConnectorIntegration<api::Execute, types::RefundsData, types::RefundsResponseData> for Ebanx {}
-
-impl ConnectorIntegration<api::RSync, types::RefundsData, types::RefundsResponseData> for Ebanx {}
-
-impl api::IncomingWebhook for Ebanx {
-    fn get_webhook_object_reference_id(
-        &self,
-        _request: &api::IncomingWebhookRequestDetails<'_>,
-    ) -> CustomResult<api::webhooks::ObjectReferenceId, errors::ConnectorError> {
-        Err(report!(errors::ConnectorError::WebhooksNotImplemented))
-    }
-
-    fn get_webhook_event_type(
-        &self,
-        _request: &api::IncomingWebhookRequestDetails<'_>,
-    ) -> CustomResult<api::IncomingWebhookEvent, errors::ConnectorError> {
-        Err(report!(errors::ConnectorError::WebhooksNotImplemented))
-    }
-
-    fn get_webhook_resource_object(
-        &self,
-        _request: &api::IncomingWebhookRequestDetails<'_>,
-    ) -> CustomResult<Box<dyn masking::ErasedMaskSerialize>, errors::ConnectorError> {
-        Err(report!(errors::ConnectorError::WebhooksNotImplemented))
-    }
-}
-
-impl ConnectorSpecifications for Ebanx {}
diff --git a/crates/router/src/connector/gpayments.rs b/crates/router/src/connector/gpayments.rs
deleted file mode 100644
index 26c1fb5ee28..00000000000
--- a/crates/router/src/connector/gpayments.rs
+++ /dev/null
@@ -1,620 +0,0 @@
-pub mod gpayments_types;
-pub mod transformers;
-
-use common_utils::{
-    request::RequestContent,
-    types::{AmountConvertor, MinorUnit, MinorUnitForConnector},
-};
-use error_stack::{report, ResultExt};
-use transformers as gpayments;
-
-use crate::{
-    configs::settings,
-    connector::{gpayments::gpayments_types::GpaymentsConnectorMetaData, utils::to_connector_meta},
-    core::errors::{self, CustomResult},
-    events::connector_api_logs::ConnectorEvent,
-    headers, services,
-    services::{request, ConnectorIntegration, ConnectorSpecifications, ConnectorValidation},
-    types::{
-        self,
-        api::{self, ConnectorCommon, ConnectorCommonExt},
-        ErrorResponse, Response,
-    },
-    utils::BytesExt,
-};
-
-#[derive(Clone)]
-pub struct Gpayments {
-    _amount_converter: &'static (dyn AmountConvertor<Output = MinorUnit> + Sync),
-}
-
-impl Gpayments {
-    pub fn new() -> &'static Self {
-        &Self {
-            _amount_converter: &MinorUnitForConnector,
-        }
-    }
-}
-
-impl api::Payment for Gpayments {}
-impl api::PaymentSession for Gpayments {}
-impl api::ConnectorAccessToken for Gpayments {}
-impl api::MandateSetup for Gpayments {}
-impl api::PaymentAuthorize for Gpayments {}
-impl api::PaymentSync for Gpayments {}
-impl api::PaymentCapture for Gpayments {}
-impl api::PaymentVoid for Gpayments {}
-impl api::Refund for Gpayments {}
-impl api::RefundExecute for Gpayments {}
-impl api::RefundSync for Gpayments {}
-impl api::PaymentToken for Gpayments {}
-
-impl
-    ConnectorIntegration<
-        api::PaymentMethodToken,
-        types::PaymentMethodTokenizationData,
-        types::PaymentsResponseData,
-    > for Gpayments
-{
-    // Not Implemented (R)
-}
-
-impl<Flow, Request, Response> ConnectorCommonExt<Flow, Request, Response> for Gpayments
-where
-    Self: ConnectorIntegration<Flow, Request, Response>,
-{
-    fn build_headers(
-        &self,
-        _req: &types::RouterData<Flow, Request, Response>,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
-        let header = vec![(
-            headers::CONTENT_TYPE.to_string(),
-            self.get_content_type().to_string().into(),
-        )];
-        Ok(header)
-    }
-}
-
-impl ConnectorCommon for Gpayments {
-    fn id(&self) -> &'static str {
-        "gpayments"
-    }
-
-    fn get_currency_unit(&self) -> api::CurrencyUnit {
-        api::CurrencyUnit::Minor
-        //    TODO! Check connector documentation, on which unit they are processing the currency.
-        //    If the connector accepts amount in lower unit ( i.e cents for USD) then return api::CurrencyUnit::Minor,
-        //    if connector accepts amount in base unit (i.e dollars for USD) then return api::CurrencyUnit::Base
-    }
-
-    fn common_get_content_type(&self) -> &'static str {
-        "application/json"
-    }
-
-    fn base_url<'a>(&self, connectors: &'a settings::Connectors) -> &'a str {
-        connectors.gpayments.base_url.as_ref()
-    }
-
-    fn get_auth_header(
-        &self,
-        _auth_type: &types::ConnectorAuthType,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
-        Ok(vec![])
-    }
-
-    fn build_error_response(
-        &self,
-        res: Response,
-        event_builder: Option<&mut ConnectorEvent>,
-    ) -> CustomResult<ErrorResponse, errors::ConnectorError> {
-        let response: gpayments_types::TDS2ApiError = res
-            .response
-            .parse_struct("gpayments_types TDS2ApiError")
-            .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
-
-        event_builder.map(|i| i.set_response_body(&response));
-        router_env::logger::info!(connector_response=?response);
-
-        Ok(ErrorResponse {
-            status_code: res.status_code,
-            code: response.error_code,
-            message: response.error_description,
-            reason: response.error_detail,
-            attempt_status: None,
-            connector_transaction_id: None,
-            network_advice_code: None,
-            network_decline_code: None,
-            network_error_message: None,
-        })
-    }
-}
-
-impl ConnectorValidation for Gpayments {
-    //TODO: implement functions when support enabled
-}
-
-impl ConnectorIntegration<api::Session, types::PaymentsSessionData, types::PaymentsResponseData>
-    for Gpayments
-{
-}
-
-impl ConnectorIntegration<api::AccessTokenAuth, types::AccessTokenRequestData, types::AccessToken>
-    for Gpayments
-{
-}
-
-impl
-    ConnectorIntegration<
-        api::SetupMandate,
-        types::SetupMandateRequestData,
-        types::PaymentsResponseData,
-    > for Gpayments
-{
-}
-
-impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::PaymentsResponseData>
-    for Gpayments
-{
-}
-
-impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsResponseData>
-    for Gpayments
-{
-}
-
-impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::PaymentsResponseData>
-    for Gpayments
-{
-}
-
-impl ConnectorIntegration<api::Void, types::PaymentsCancelData, types::PaymentsResponseData>
-    for Gpayments
-{
-}
-
-impl ConnectorIntegration<api::Execute, types::RefundsData, types::RefundsResponseData>
-    for Gpayments
-{
-}
-
-impl ConnectorIntegration<api::RSync, types::RefundsData, types::RefundsResponseData>
-    for Gpayments
-{
-}
-
-#[async_trait::async_trait]
-impl api::IncomingWebhook for Gpayments {
-    fn get_webhook_object_reference_id(
-        &self,
-        _request: &api::IncomingWebhookRequestDetails<'_>,
-    ) -> CustomResult<api::webhooks::ObjectReferenceId, errors::ConnectorError> {
-        Err(report!(errors::ConnectorError::WebhooksNotImplemented))
-    }
-
-    fn get_webhook_event_type(
-        &self,
-        _request: &api::IncomingWebhookRequestDetails<'_>,
-    ) -> CustomResult<api::IncomingWebhookEvent, errors::ConnectorError> {
-        Err(report!(errors::ConnectorError::WebhooksNotImplemented))
-    }
-
-    fn get_webhook_resource_object(
-        &self,
-        _request: &api::IncomingWebhookRequestDetails<'_>,
-    ) -> CustomResult<Box<dyn masking::ErasedMaskSerialize>, errors::ConnectorError> {
-        Err(report!(errors::ConnectorError::WebhooksNotImplemented))
-    }
-}
-
-impl api::ExternalAuthentication for Gpayments {}
-impl api::ConnectorAuthentication for Gpayments {}
-impl api::ConnectorPreAuthentication for Gpayments {}
-impl api::ConnectorPreAuthenticationVersionCall for Gpayments {}
-impl api::ConnectorPostAuthentication for Gpayments {}
-
-fn build_endpoint(
-    base_url: &str,
-    connector_metadata: &Option<common_utils::pii::SecretSerdeValue>,
-) -> CustomResult<String, errors::ConnectorError> {
-    let metadata = gpayments::GpaymentsMetaData::try_from(connector_metadata)?;
-    let endpoint_prefix = metadata.endpoint_prefix;
-    Ok(base_url.replace("{{merchant_endpoint_prefix}}", &endpoint_prefix))
-}
-
-impl
-    ConnectorIntegration<
-        api::Authentication,
-        types::authentication::ConnectorAuthenticationRequestData,
-        types::authentication::AuthenticationResponseData,
-    > for Gpayments
-{
-    fn get_headers(
-        &self,
-        req: &types::authentication::ConnectorAuthenticationRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
-        self.build_headers(req, connectors)
-    }
-
-    fn get_content_type(&self) -> &'static str {
-        self.common_get_content_type()
-    }
-
-    fn get_url(
-        &self,
-        req: &types::authentication::ConnectorAuthenticationRouterData,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<String, errors::ConnectorError> {
-        let connector_metadata: GpaymentsConnectorMetaData = to_connector_meta(
-            req.request
-                .pre_authentication_data
-                .connector_metadata
-                .clone(),
-        )?;
-        Ok(connector_metadata.authentication_url)
-    }
-
-    fn get_request_body(
-        &self,
-        req: &types::authentication::ConnectorAuthenticationRouterData,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<RequestContent, errors::ConnectorError> {
-        let connector_router_data = gpayments::GpaymentsRouterData::from((MinorUnit::zero(), req));
-        let req_obj =
-            gpayments_types::GpaymentsAuthenticationRequest::try_from(&connector_router_data)?;
-        Ok(RequestContent::Json(Box::new(req_obj)))
-    }
-    fn build_request(
-        &self,
-        req: &types::authentication::ConnectorAuthenticationRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
-        let gpayments_auth_type = gpayments::GpaymentsAuthType::try_from(&req.connector_auth_type)?;
-        Ok(Some(
-            services::RequestBuilder::new()
-                .method(services::Method::Post)
-                .url(
-                    &types::authentication::ConnectorAuthenticationType::get_url(
-                        self, req, connectors,
-                    )?,
-                )
-                .attach_default_headers()
-                .headers(
-                    types::authentication::ConnectorAuthenticationType::get_headers(
-                        self, req, connectors,
-                    )?,
-                )
-                .set_body(
-                    types::authentication::ConnectorAuthenticationType::get_request_body(
-                        self, req, connectors,
-                    )?,
-                )
-                .add_certificate(Some(gpayments_auth_type.certificate))
-                .add_certificate_key(Some(gpayments_auth_type.private_key))
-                .build(),
-        ))
-    }
-
-    fn handle_response(
-        &self,
-        data: &types::authentication::ConnectorAuthenticationRouterData,
-        event_builder: Option<&mut ConnectorEvent>,
-        res: Response,
-    ) -> CustomResult<
-        types::authentication::ConnectorAuthenticationRouterData,
-        errors::ConnectorError,
-    > {
-        let response: gpayments_types::GpaymentsAuthenticationSuccessResponse = res
-            .response
-            .parse_struct("gpayments GpaymentsAuthenticationResponse")
-            .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
-        event_builder.map(|i| i.set_response_body(&response));
-        router_env::logger::info!(connector_response=?response);
-        types::RouterData::try_from(types::ResponseRouterData {
-            response,
-            data: data.clone(),
-            http_code: res.status_code,
-        })
-    }
-
-    fn get_error_response(
-        &self,
-        res: Response,
-        event_builder: Option<&mut ConnectorEvent>,
-    ) -> CustomResult<ErrorResponse, errors::ConnectorError> {
-        self.build_error_response(res, event_builder)
-    }
-}
-impl
-    ConnectorIntegration<
-        api::PostAuthentication,
-        types::authentication::ConnectorPostAuthenticationRequestData,
-        types::authentication::AuthenticationResponseData,
-    > for Gpayments
-{
-    fn get_headers(
-        &self,
-        req: &types::authentication::ConnectorPostAuthenticationRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
-        self.build_headers(req, connectors)
-    }
-
-    fn get_content_type(&self) -> &'static str {
-        self.common_get_content_type()
-    }
-
-    fn get_url(
-        &self,
-        req: &types::authentication::ConnectorPostAuthenticationRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<String, errors::ConnectorError> {
-        let base_url = build_endpoint(self.base_url(connectors), &req.connector_meta_data)?;
-        Ok(format!(
-            "{}/api/v2/auth/brw/result?threeDSServerTransID={}",
-            base_url, req.request.threeds_server_transaction_id,
-        ))
-    }
-
-    fn build_request(
-        &self,
-        req: &types::authentication::ConnectorPostAuthenticationRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
-        let gpayments_auth_type = gpayments::GpaymentsAuthType::try_from(&req.connector_auth_type)?;
-        Ok(Some(
-            services::RequestBuilder::new()
-                .method(services::Method::Get)
-                .url(
-                    &types::authentication::ConnectorPostAuthenticationType::get_url(
-                        self, req, connectors,
-                    )?,
-                )
-                .attach_default_headers()
-                .headers(
-                    types::authentication::ConnectorPostAuthenticationType::get_headers(
-                        self, req, connectors,
-                    )?,
-                )
-                .add_certificate(Some(gpayments_auth_type.certificate))
-                .add_certificate_key(Some(gpayments_auth_type.private_key))
-                .build(),
-        ))
-    }
-
-    fn handle_response(
-        &self,
-        data: &types::authentication::ConnectorPostAuthenticationRouterData,
-        event_builder: Option<&mut ConnectorEvent>,
-        res: Response,
-    ) -> CustomResult<
-        types::authentication::ConnectorPostAuthenticationRouterData,
-        errors::ConnectorError,
-    > {
-        let response: gpayments_types::GpaymentsPostAuthenticationResponse = res
-            .response
-            .parse_struct("gpayments PaymentsSyncResponse")
-            .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
-        event_builder.map(|i| i.set_response_body(&response));
-        router_env::logger::info!(connector_response=?response);
-        Ok(
-            types::authentication::ConnectorPostAuthenticationRouterData {
-                response: Ok(
-                    types::authentication::AuthenticationResponseData::PostAuthNResponse {
-                        trans_status: response.trans_status.into(),
-                        authentication_value: response.authentication_value,
-                        eci: response.eci,
-                    },
-                ),
-                ..data.clone()
-            },
-        )
-    }
-
-    fn get_error_response(
-        &self,
-        res: Response,
-        event_builder: Option<&mut ConnectorEvent>,
-    ) -> CustomResult<ErrorResponse, errors::ConnectorError> {
-        self.build_error_response(res, event_builder)
-    }
-}
-
-impl
-    ConnectorIntegration<
-        api::PreAuthentication,
-        types::authentication::PreAuthNRequestData,
-        types::authentication::AuthenticationResponseData,
-    > for Gpayments
-{
-    fn get_headers(
-        &self,
-        req: &types::authentication::PreAuthNRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
-        self.build_headers(req, connectors)
-    }
-
-    fn get_content_type(&self) -> &'static str {
-        self.common_get_content_type()
-    }
-
-    fn get_url(
-        &self,
-        req: &types::authentication::PreAuthNRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<String, errors::ConnectorError> {
-        let base_url = build_endpoint(self.base_url(connectors), &req.connector_meta_data)?;
-        Ok(format!("{}/api/v2/auth/brw/init?mode=custom", base_url,))
-    }
-
-    fn get_request_body(
-        &self,
-        req: &types::authentication::PreAuthNRouterData,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<RequestContent, errors::ConnectorError> {
-        let connector_router_data = gpayments::GpaymentsRouterData::from((MinorUnit::zero(), req));
-        let req_obj =
-            gpayments_types::GpaymentsPreAuthenticationRequest::try_from(&connector_router_data)?;
-        Ok(RequestContent::Json(Box::new(req_obj)))
-    }
-
-    fn build_request(
-        &self,
-        req: &types::authentication::PreAuthNRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
-        let gpayments_auth_type = gpayments::GpaymentsAuthType::try_from(&req.connector_auth_type)?;
-        Ok(Some(
-            services::RequestBuilder::new()
-                .method(services::Method::Post)
-                .url(
-                    &types::authentication::ConnectorPreAuthenticationType::get_url(
-                        self, req, connectors,
-                    )?,
-                )
-                .attach_default_headers()
-                .headers(
-                    types::authentication::ConnectorPreAuthenticationType::get_headers(
-                        self, req, connectors,
-                    )?,
-                )
-                .set_body(
-                    types::authentication::ConnectorPreAuthenticationType::get_request_body(
-                        self, req, connectors,
-                    )?,
-                )
-                .add_certificate(Some(gpayments_auth_type.certificate))
-                .add_certificate_key(Some(gpayments_auth_type.private_key))
-                .build(),
-        ))
-    }
-
-    fn handle_response(
-        &self,
-        data: &types::authentication::PreAuthNRouterData,
-        event_builder: Option<&mut ConnectorEvent>,
-        res: Response,
-    ) -> CustomResult<types::authentication::PreAuthNRouterData, errors::ConnectorError> {
-        let response: gpayments_types::GpaymentsPreAuthenticationResponse = res
-            .response
-            .parse_struct("gpayments GpaymentsPreAuthenticationResponse")
-            .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
-        event_builder.map(|i| i.set_response_body(&response));
-        router_env::logger::info!(connector_response=?response);
-        types::RouterData::try_from(types::ResponseRouterData {
-            response,
-            data: data.clone(),
-            http_code: res.status_code,
-        })
-    }
-
-    fn get_error_response(
-        &self,
-        res: Response,
-        event_builder: Option<&mut ConnectorEvent>,
-    ) -> CustomResult<ErrorResponse, errors::ConnectorError> {
-        self.build_error_response(res, event_builder)
-    }
-}
-impl
-    ConnectorIntegration<
-        api::PreAuthenticationVersionCall,
-        types::authentication::PreAuthNRequestData,
-        types::authentication::AuthenticationResponseData,
-    > for Gpayments
-{
-    fn get_headers(
-        &self,
-        req: &types::authentication::PreAuthNVersionCallRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
-        self.build_headers(req, connectors)
-    }
-
-    fn get_content_type(&self) -> &'static str {
-        self.common_get_content_type()
-    }
-
-    fn get_url(
-        &self,
-        req: &types::authentication::PreAuthNVersionCallRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<String, errors::ConnectorError> {
-        let base_url = build_endpoint(self.base_url(connectors), &req.connector_meta_data)?;
-        Ok(format!("{}/api/v2/auth/enrol", base_url,))
-    }
-
-    fn get_request_body(
-        &self,
-        req: &types::authentication::PreAuthNVersionCallRouterData,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<RequestContent, errors::ConnectorError> {
-        let connector_router_data = gpayments::GpaymentsRouterData::from((MinorUnit::zero(), req));
-        let req_obj =
-            gpayments_types::GpaymentsPreAuthVersionCallRequest::try_from(&connector_router_data)?;
-        Ok(RequestContent::Json(Box::new(req_obj)))
-    }
-
-    fn build_request(
-        &self,
-        req: &types::authentication::PreAuthNVersionCallRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
-        let gpayments_auth_type = gpayments::GpaymentsAuthType::try_from(&req.connector_auth_type)?;
-        Ok(Some(
-            services::RequestBuilder::new()
-                .method(services::Method::Post)
-                .url(
-                    &types::authentication::ConnectorPreAuthenticationVersionCallType::get_url(
-                        self, req, connectors,
-                    )?,
-                )
-                .attach_default_headers()
-                .headers(
-                    types::authentication::ConnectorPreAuthenticationVersionCallType::get_headers(
-                        self, req, connectors,
-                    )?,
-                )
-                .set_body(
-                    types::authentication::ConnectorPreAuthenticationVersionCallType::get_request_body(
-                        self, req, connectors,
-                    )?,
-                )
-                .add_certificate(Some(gpayments_auth_type.certificate))
-                .add_certificate_key(Some(gpayments_auth_type.private_key))
-                .build(),
-        ))
-    }
-
-    fn handle_response(
-        &self,
-        data: &types::authentication::PreAuthNVersionCallRouterData,
-        event_builder: Option<&mut ConnectorEvent>,
-        res: Response,
-    ) -> CustomResult<types::authentication::PreAuthNVersionCallRouterData, errors::ConnectorError>
-    {
-        let response: gpayments_types::GpaymentsPreAuthVersionCallResponse = res
-            .response
-            .parse_struct("gpayments GpaymentsPreAuthVersionCallResponse")
-            .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
-        event_builder.map(|i| i.set_response_body(&response));
-        router_env::logger::info!(connector_response=?response);
-        types::RouterData::try_from(types::ResponseRouterData {
-            response,
-            data: data.clone(),
-            http_code: res.status_code,
-        })
-    }
-
-    fn get_error_response(
-        &self,
-        res: Response,
-        event_builder: Option<&mut ConnectorEvent>,
-    ) -> CustomResult<ErrorResponse, errors::ConnectorError> {
-        self.build_error_response(res, event_builder)
-    }
-}
-
-impl ConnectorSpecifications for Gpayments {}
diff --git a/crates/router/src/connector/netcetera.rs b/crates/router/src/connector/netcetera.rs
deleted file mode 100644
index 058d737029e..00000000000
--- a/crates/router/src/connector/netcetera.rs
+++ /dev/null
@@ -1,469 +0,0 @@
-pub mod netcetera_types;
-pub mod transformers;
-
-use std::fmt::Debug;
-
-use common_utils::{ext_traits::ByteSliceExt, request::RequestContent};
-use error_stack::ResultExt;
-use hyperswitch_interfaces::authentication::ExternalAuthenticationPayload;
-use transformers as netcetera;
-
-use crate::{
-    configs::settings,
-    core::errors::{self, CustomResult},
-    events::connector_api_logs::ConnectorEvent,
-    headers,
-    services::{self, request, ConnectorIntegration, ConnectorSpecifications, ConnectorValidation},
-    types::{
-        self,
-        api::{self, ConnectorCommon, ConnectorCommonExt},
-        ErrorResponse, Response,
-    },
-    utils::BytesExt,
-};
-
-#[derive(Debug, Clone)]
-pub struct Netcetera;
-
-impl api::Payment for Netcetera {}
-impl api::PaymentSession for Netcetera {}
-impl api::ConnectorAccessToken for Netcetera {}
-impl api::MandateSetup for Netcetera {}
-impl api::PaymentAuthorize for Netcetera {}
-impl api::PaymentSync for Netcetera {}
-impl api::PaymentCapture for Netcetera {}
-impl api::PaymentVoid for Netcetera {}
-impl api::Refund for Netcetera {}
-impl api::RefundExecute for Netcetera {}
-impl api::RefundSync for Netcetera {}
-impl api::PaymentToken for Netcetera {}
-
-impl
-    ConnectorIntegration<
-        api::PaymentMethodToken,
-        types::PaymentMethodTokenizationData,
-        types::PaymentsResponseData,
-    > for Netcetera
-{
-    // Not Implemented (R)
-}
-
-impl<Flow, Request, Response> ConnectorCommonExt<Flow, Request, Response> for Netcetera
-where
-    Self: ConnectorIntegration<Flow, Request, Response>,
-{
-    fn build_headers(
-        &self,
-        req: &types::RouterData<Flow, Request, Response>,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
-        let mut header = vec![(
-            headers::CONTENT_TYPE.to_string(),
-            self.get_content_type().to_string().into(),
-        )];
-        let mut api_key = self.get_auth_header(&req.connector_auth_type)?;
-        header.append(&mut api_key);
-        Ok(header)
-    }
-}
-
-impl ConnectorCommon for Netcetera {
-    fn id(&self) -> &'static str {
-        "netcetera"
-    }
-
-    fn get_currency_unit(&self) -> api::CurrencyUnit {
-        api::CurrencyUnit::Minor
-    }
-
-    fn common_get_content_type(&self) -> &'static str {
-        "application/json"
-    }
-
-    fn base_url<'a>(&self, connectors: &'a settings::Connectors) -> &'a str {
-        connectors.netcetera.base_url.as_ref()
-    }
-
-    fn get_auth_header(
-        &self,
-        _auth_type: &types::ConnectorAuthType,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
-        Ok(vec![])
-    }
-
-    fn build_error_response(
-        &self,
-        res: Response,
-        event_builder: Option<&mut ConnectorEvent>,
-    ) -> CustomResult<ErrorResponse, errors::ConnectorError> {
-        let response: netcetera::NetceteraErrorResponse = res
-            .response
-            .parse_struct("NetceteraErrorResponse")
-            .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
-
-        event_builder.map(|i| i.set_response_body(&response));
-        router_env::logger::info!(connector_response=?response);
-
-        Ok(ErrorResponse {
-            status_code: res.status_code,
-            code: response.error_details.error_code,
-            message: response.error_details.error_description,
-            reason: response.error_details.error_detail,
-            attempt_status: None,
-            connector_transaction_id: None,
-            network_advice_code: None,
-            network_decline_code: None,
-            network_error_message: None,
-        })
-    }
-}
-
-impl ConnectorValidation for Netcetera {}
-
-impl ConnectorIntegration<api::Session, types::PaymentsSessionData, types::PaymentsResponseData>
-    for Netcetera
-{
-}
-
-impl ConnectorIntegration<api::AccessTokenAuth, types::AccessTokenRequestData, types::AccessToken>
-    for Netcetera
-{
-}
-
-impl
-    ConnectorIntegration<
-        api::SetupMandate,
-        types::SetupMandateRequestData,
-        types::PaymentsResponseData,
-    > for Netcetera
-{
-}
-
-impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::PaymentsResponseData>
-    for Netcetera
-{
-}
-
-impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsResponseData>
-    for Netcetera
-{
-}
-
-impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::PaymentsResponseData>
-    for Netcetera
-{
-}
-
-impl ConnectorIntegration<api::Void, types::PaymentsCancelData, types::PaymentsResponseData>
-    for Netcetera
-{
-}
-
-impl ConnectorIntegration<api::Execute, types::RefundsData, types::RefundsResponseData>
-    for Netcetera
-{
-}
-
-impl ConnectorIntegration<api::RSync, types::RefundsData, types::RefundsResponseData>
-    for Netcetera
-{
-}
-
-#[async_trait::async_trait]
-impl api::IncomingWebhook for Netcetera {
-    fn get_webhook_object_reference_id(
-        &self,
-        request: &api::IncomingWebhookRequestDetails<'_>,
-    ) -> CustomResult<api::webhooks::ObjectReferenceId, errors::ConnectorError> {
-        let webhook_body: netcetera::ResultsResponseData = request
-            .body
-            .parse_struct("netcetera ResultsResponseData")
-            .change_context(errors::ConnectorError::WebhookBodyDecodingFailed)?;
-        Ok(api::webhooks::ObjectReferenceId::ExternalAuthenticationID(
-            api::webhooks::AuthenticationIdType::ConnectorAuthenticationId(
-                webhook_body.three_ds_server_trans_id,
-            ),
-        ))
-    }
-
-    fn get_webhook_event_type(
-        &self,
-        _request: &api::IncomingWebhookRequestDetails<'_>,
-    ) -> CustomResult<api::IncomingWebhookEvent, errors::ConnectorError> {
-        Ok(api::IncomingWebhookEvent::ExternalAuthenticationARes)
-    }
-
-    fn get_webhook_resource_object(
-        &self,
-        request: &api::IncomingWebhookRequestDetails<'_>,
-    ) -> CustomResult<Box<dyn masking::ErasedMaskSerialize>, errors::ConnectorError> {
-        let webhook_body_value: netcetera::ResultsResponseData = request
-            .body
-            .parse_struct("netcetera ResultsResponseDatae")
-            .change_context(errors::ConnectorError::WebhookBodyDecodingFailed)?;
-        Ok(Box::new(webhook_body_value))
-    }
-
-    fn get_external_authentication_details(
-        &self,
-        request: &api::IncomingWebhookRequestDetails<'_>,
-    ) -> CustomResult<ExternalAuthenticationPayload, errors::ConnectorError> {
-        let webhook_body: netcetera::ResultsResponseData = request
-            .body
-            .parse_struct("netcetera ResultsResponseData")
-            .change_context(errors::ConnectorError::WebhookBodyDecodingFailed)?;
-        Ok(ExternalAuthenticationPayload {
-            trans_status: webhook_body
-                .trans_status
-                .unwrap_or(common_enums::TransactionStatus::InformationOnly),
-            authentication_value: webhook_body.authentication_value,
-            eci: webhook_body.eci,
-        })
-    }
-}
-
-fn build_endpoint(
-    base_url: &str,
-    connector_metadata: &Option<common_utils::pii::SecretSerdeValue>,
-) -> CustomResult<String, errors::ConnectorError> {
-    let metadata = netcetera::NetceteraMetaData::try_from(connector_metadata)?;
-    let endpoint_prefix = metadata.endpoint_prefix;
-    Ok(base_url.replace("{{merchant_endpoint_prefix}}", &endpoint_prefix))
-}
-
-impl api::ConnectorPreAuthentication for Netcetera {}
-impl api::ConnectorPreAuthenticationVersionCall for Netcetera {}
-impl api::ExternalAuthentication for Netcetera {}
-impl api::ConnectorAuthentication for Netcetera {}
-impl api::ConnectorPostAuthentication for Netcetera {}
-
-impl
-    ConnectorIntegration<
-        api::PreAuthentication,
-        types::authentication::PreAuthNRequestData,
-        types::authentication::AuthenticationResponseData,
-    > for Netcetera
-{
-    fn get_headers(
-        &self,
-        req: &types::authentication::PreAuthNRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
-        self.build_headers(req, connectors)
-    }
-
-    fn get_content_type(&self) -> &'static str {
-        self.common_get_content_type()
-    }
-
-    fn get_url(
-        &self,
-        req: &types::authentication::PreAuthNRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<String, errors::ConnectorError> {
-        let base_url = build_endpoint(self.base_url(connectors), &req.connector_meta_data)?;
-        Ok(format!("{}/3ds/versioning", base_url,))
-    }
-
-    fn get_request_body(
-        &self,
-        req: &types::authentication::PreAuthNRouterData,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<RequestContent, errors::ConnectorError> {
-        let connector_router_data = netcetera::NetceteraRouterData::try_from((0, req))?;
-        let req_obj =
-            netcetera::NetceteraPreAuthenticationRequest::try_from(&connector_router_data)?;
-        Ok(RequestContent::Json(Box::new(req_obj)))
-    }
-
-    fn build_request(
-        &self,
-        req: &types::authentication::PreAuthNRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
-        let netcetera_auth_type = netcetera::NetceteraAuthType::try_from(&req.connector_auth_type)?;
-        Ok(Some(
-            services::RequestBuilder::new()
-                .method(services::Method::Post)
-                .url(
-                    &types::authentication::ConnectorPreAuthenticationType::get_url(
-                        self, req, connectors,
-                    )?,
-                )
-                .attach_default_headers()
-                .headers(
-                    types::authentication::ConnectorPreAuthenticationType::get_headers(
-                        self, req, connectors,
-                    )?,
-                )
-                .set_body(
-                    types::authentication::ConnectorPreAuthenticationType::get_request_body(
-                        self, req, connectors,
-                    )?,
-                )
-                .add_certificate(Some(netcetera_auth_type.certificate))
-                .add_certificate_key(Some(netcetera_auth_type.private_key))
-                .build(),
-        ))
-    }
-
-    fn handle_response(
-        &self,
-        data: &types::authentication::PreAuthNRouterData,
-        event_builder: Option<&mut ConnectorEvent>,
-        res: Response,
-    ) -> CustomResult<types::authentication::PreAuthNRouterData, errors::ConnectorError> {
-        let response: netcetera::NetceteraPreAuthenticationResponse = res
-            .response
-            .parse_struct("netcetera NetceteraPreAuthenticationResponse")
-            .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
-        event_builder.map(|i| i.set_response_body(&response));
-        router_env::logger::info!(connector_response=?response);
-        types::RouterData::try_from(types::ResponseRouterData {
-            response,
-            data: data.clone(),
-            http_code: res.status_code,
-        })
-    }
-
-    fn get_error_response(
-        &self,
-        res: Response,
-        event_builder: Option<&mut ConnectorEvent>,
-    ) -> CustomResult<ErrorResponse, errors::ConnectorError> {
-        self.build_error_response(res, event_builder)
-    }
-}
-
-impl
-    ConnectorIntegration<
-        api::Authentication,
-        types::authentication::ConnectorAuthenticationRequestData,
-        types::authentication::AuthenticationResponseData,
-    > for Netcetera
-{
-    fn get_headers(
-        &self,
-        req: &types::authentication::ConnectorAuthenticationRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
-        self.build_headers(req, connectors)
-    }
-
-    fn get_content_type(&self) -> &'static str {
-        self.common_get_content_type()
-    }
-
-    fn get_url(
-        &self,
-        req: &types::authentication::ConnectorAuthenticationRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<String, errors::ConnectorError> {
-        let base_url = build_endpoint(self.base_url(connectors), &req.connector_meta_data)?;
-        Ok(format!("{}/3ds/authentication", base_url,))
-    }
-
-    fn get_request_body(
-        &self,
-        req: &types::authentication::ConnectorAuthenticationRouterData,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<RequestContent, errors::ConnectorError> {
-        let connector_router_data = netcetera::NetceteraRouterData::try_from((
-            &self.get_currency_unit(),
-            req.request
-                .currency
-                .ok_or(errors::ConnectorError::MissingRequiredField {
-                    field_name: "currency",
-                })?,
-            req.request
-                .amount
-                .ok_or(errors::ConnectorError::MissingRequiredField {
-                    field_name: "amount",
-                })?,
-            req,
-        ))?;
-        let req_obj = netcetera::NetceteraAuthenticationRequest::try_from(&connector_router_data);
-        Ok(RequestContent::Json(Box::new(req_obj?)))
-    }
-
-    fn build_request(
-        &self,
-        req: &types::authentication::ConnectorAuthenticationRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
-        let netcetera_auth_type = netcetera::NetceteraAuthType::try_from(&req.connector_auth_type)?;
-        Ok(Some(
-            services::RequestBuilder::new()
-                .method(services::Method::Post)
-                .url(
-                    &types::authentication::ConnectorAuthenticationType::get_url(
-                        self, req, connectors,
-                    )?,
-                )
-                .attach_default_headers()
-                .headers(
-                    types::authentication::ConnectorAuthenticationType::get_headers(
-                        self, req, connectors,
-                    )?,
-                )
-                .set_body(
-                    types::authentication::ConnectorAuthenticationType::get_request_body(
-                        self, req, connectors,
-                    )?,
-                )
-                .add_certificate(Some(netcetera_auth_type.certificate))
-                .add_certificate_key(Some(netcetera_auth_type.private_key))
-                .build(),
-        ))
-    }
-
-    fn handle_response(
-        &self,
-        data: &types::authentication::ConnectorAuthenticationRouterData,
-        event_builder: Option<&mut ConnectorEvent>,
-        res: Response,
-    ) -> CustomResult<
-        types::authentication::ConnectorAuthenticationRouterData,
-        errors::ConnectorError,
-    > {
-        let response: netcetera::NetceteraAuthenticationResponse = res
-            .response
-            .parse_struct("NetceteraAuthenticationResponse")
-            .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
-        event_builder.map(|i| i.set_response_body(&response));
-        router_env::logger::info!(connector_response=?response);
-        types::RouterData::try_from(types::ResponseRouterData {
-            response,
-            data: data.clone(),
-            http_code: res.status_code,
-        })
-    }
-
-    fn get_error_response(
-        &self,
-        res: Response,
-        event_builder: Option<&mut ConnectorEvent>,
-    ) -> CustomResult<ErrorResponse, errors::ConnectorError> {
-        self.build_error_response(res, event_builder)
-    }
-}
-
-impl
-    ConnectorIntegration<
-        api::PostAuthentication,
-        types::authentication::ConnectorPostAuthenticationRequestData,
-        types::authentication::AuthenticationResponseData,
-    > for Netcetera
-{
-}
-
-impl
-    ConnectorIntegration<
-        api::PreAuthenticationVersionCall,
-        types::authentication::PreAuthNRequestData,
-        types::authentication::AuthenticationResponseData,
-    > for Netcetera
-{
-}
-
-impl ConnectorSpecifications for Netcetera {}
diff --git a/crates/router/src/connector/plaid.rs b/crates/router/src/connector/plaid.rs
deleted file mode 100644
index b0bb40fe8a5..00000000000
--- a/crates/router/src/connector/plaid.rs
+++ /dev/null
@@ -1,463 +0,0 @@
-pub mod transformers;
-
-use common_utils::types::{AmountConvertor, FloatMajorUnit, FloatMajorUnitForConnector};
-use error_stack::ResultExt;
-use transformers as plaid;
-
-use crate::{
-    configs::settings,
-    connector::utils as connector_utils,
-    core::errors::{self, CustomResult},
-    events::connector_api_logs::ConnectorEvent,
-    headers,
-    services::{
-        self,
-        request::{self, Mask},
-        ConnectorIntegration, ConnectorSpecifications, ConnectorValidation,
-    },
-    types::{
-        self,
-        api::{self, ConnectorCommon, ConnectorCommonExt},
-        ErrorResponse, RequestContent, Response,
-    },
-    utils::BytesExt,
-};
-
-#[derive(Clone)]
-pub struct Plaid {
-    amount_converter: &'static (dyn AmountConvertor<Output = FloatMajorUnit> + Sync),
-}
-
-impl Plaid {
-    pub fn new() -> &'static Self {
-        &Self {
-            amount_converter: &FloatMajorUnitForConnector,
-        }
-    }
-}
-
-impl api::Payment for Plaid {}
-impl api::PaymentSession for Plaid {}
-impl api::ConnectorAccessToken for Plaid {}
-impl api::MandateSetup for Plaid {}
-impl api::PaymentAuthorize for Plaid {}
-impl api::PaymentSync for Plaid {}
-impl api::PaymentCapture for Plaid {}
-impl api::PaymentVoid for Plaid {}
-impl api::Refund for Plaid {}
-impl api::RefundExecute for Plaid {}
-impl api::RefundSync for Plaid {}
-impl api::PaymentToken for Plaid {}
-impl api::PaymentsPostProcessing for Plaid {}
-
-impl
-    ConnectorIntegration<
-        api::PaymentMethodToken,
-        types::PaymentMethodTokenizationData,
-        types::PaymentsResponseData,
-    > for Plaid
-{
-    // Not Implemented (R)
-}
-
-impl<Flow, Request, Response> ConnectorCommonExt<Flow, Request, Response> for Plaid
-where
-    Self: ConnectorIntegration<Flow, Request, Response>,
-{
-    fn build_headers(
-        &self,
-        req: &types::RouterData<Flow, Request, Response>,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
-        let mut header = vec![(
-            headers::CONTENT_TYPE.to_string(),
-            self.get_content_type().to_string().into(),
-        )];
-        let mut auth = self.get_auth_header(&req.connector_auth_type)?;
-        header.append(&mut auth);
-        Ok(header)
-    }
-}
-
-impl ConnectorCommon for Plaid {
-    fn id(&self) -> &'static str {
-        "plaid"
-    }
-
-    fn get_currency_unit(&self) -> api::CurrencyUnit {
-        api::CurrencyUnit::Base
-    }
-
-    fn common_get_content_type(&self) -> &'static str {
-        "application/json"
-    }
-
-    fn base_url<'a>(&self, connectors: &'a settings::Connectors) -> &'a str {
-        connectors.plaid.base_url.as_ref()
-    }
-
-    fn get_auth_header(
-        &self,
-        auth_type: &types::ConnectorAuthType,
-    ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
-        let auth = plaid::PlaidAuthType::try_from(auth_type)
-            .change_context(errors::ConnectorError::FailedToObtainAuthType)?;
-        let client_id = auth.client_id.into_masked();
-        let secret = auth.secret.into_masked();
-
-        Ok(vec![
-            ("PLAID-CLIENT-ID".to_string(), client_id),
-            ("PLAID-SECRET".to_string(), secret),
-        ])
-    }
-
-    fn build_error_response(
-        &self,
-        res: Response,
-        event_builder: Option<&mut ConnectorEvent>,
-    ) -> CustomResult<ErrorResponse, errors::ConnectorError> {
-        let response: plaid::PlaidErrorResponse =
-            res.response
-                .parse_struct("PlaidErrorResponse")
-                .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
-
-        event_builder.map(|i| i.set_response_body(&response));
-        router_env::logger::info!(connector_response=?response);
-
-        Ok(ErrorResponse {
-            status_code: res.status_code,
-            code: response
-                .error_code
-                .unwrap_or(crate::consts::NO_ERROR_CODE.to_string()),
-            message: response.error_message,
-            reason: response.display_message,
-            attempt_status: None,
-            connector_transaction_id: None,
-            network_advice_code: None,
-            network_decline_code: None,
-            network_error_message: None,
-        })
-    }
-}
-
-impl ConnectorValidation for Plaid {
-    //TODO: implement functions when support enabled
-}
-
-impl ConnectorIntegration<api::Session, types::PaymentsSessionData, types::PaymentsResponseData>
-    for Plaid
-{
-    //TODO: implement sessions flow
-}
-
-impl ConnectorIntegration<api::AccessTokenAuth, types::AccessTokenRequestData, types::AccessToken>
-    for Plaid
-{
-}
-
-impl
-    ConnectorIntegration<
-        api::SetupMandate,
-        types::SetupMandateRequestData,
-        types::PaymentsResponseData,
-    > for Plaid
-{
-}
-
-impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::PaymentsResponseData>
-    for Plaid
-{
-    fn get_headers(
-        &self,
-        req: &types::PaymentsAuthorizeRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
-        self.build_headers(req, connectors)
-    }
-
-    fn get_content_type(&self) -> &'static str {
-        self.common_get_content_type()
-    }
-
-    fn get_url(
-        &self,
-        _req: &types::PaymentsAuthorizeRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<String, errors::ConnectorError> {
-        Ok(format!(
-            "{}/payment_initiation/payment/create",
-            self.base_url(connectors)
-        ))
-    }
-
-    fn get_request_body(
-        &self,
-        req: &types::PaymentsAuthorizeRouterData,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<RequestContent, errors::ConnectorError> {
-        let amount = connector_utils::convert_amount(
-            self.amount_converter,
-            req.request.minor_amount,
-            req.request.currency,
-        )?;
-        let connector_router_data = plaid::PlaidRouterData::from((amount, req));
-        let connector_req = plaid::PlaidPaymentsRequest::try_from(&connector_router_data)?;
-        Ok(RequestContent::Json(Box::new(connector_req)))
-    }
-
-    fn build_request(
-        &self,
-        req: &types::PaymentsAuthorizeRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
-        Ok(Some(
-            services::RequestBuilder::new()
-                .method(services::Method::Post)
-                .url(&types::PaymentsAuthorizeType::get_url(
-                    self, req, connectors,
-                )?)
-                .attach_default_headers()
-                .headers(types::PaymentsAuthorizeType::get_headers(
-                    self, req, connectors,
-                )?)
-                .set_body(types::PaymentsAuthorizeType::get_request_body(
-                    self, req, connectors,
-                )?)
-                .build(),
-        ))
-    }
-
-    fn handle_response(
-        &self,
-        data: &types::PaymentsAuthorizeRouterData,
-        event_builder: Option<&mut ConnectorEvent>,
-        res: Response,
-    ) -> CustomResult<types::PaymentsAuthorizeRouterData, errors::ConnectorError> {
-        let response: plaid::PlaidPaymentsResponse = res
-            .response
-            .parse_struct("PlaidPaymentsResponse")
-            .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
-        event_builder.map(|i| i.set_response_body(&response));
-        router_env::logger::info!(connector_response=?response);
-        types::RouterData::try_from(types::ResponseRouterData {
-            response,
-            data: data.clone(),
-            http_code: res.status_code,
-        })
-    }
-
-    fn get_error_response(
-        &self,
-        res: Response,
-        event_builder: Option<&mut ConnectorEvent>,
-    ) -> CustomResult<ErrorResponse, errors::ConnectorError> {
-        self.build_error_response(res, event_builder)
-    }
-}
-
-impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsResponseData>
-    for Plaid
-{
-    fn get_headers(
-        &self,
-        req: &types::PaymentsSyncRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
-        self.build_headers(req, connectors)
-    }
-
-    fn get_content_type(&self) -> &'static str {
-        self.common_get_content_type()
-    }
-
-    fn get_request_body(
-        &self,
-        req: &types::PaymentsSyncRouterData,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<RequestContent, errors::ConnectorError> {
-        let connector_req = plaid::PlaidSyncRequest::try_from(req)?;
-        Ok(RequestContent::Json(Box::new(connector_req)))
-    }
-
-    fn get_url(
-        &self,
-        _req: &types::PaymentsSyncRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<String, errors::ConnectorError> {
-        Ok(format!(
-            "{}/payment_initiation/payment/get",
-            self.base_url(connectors)
-        ))
-    }
-
-    fn build_request(
-        &self,
-        req: &types::PaymentsSyncRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
-        Ok(Some(
-            services::RequestBuilder::new()
-                .method(services::Method::Post)
-                .url(&types::PaymentsSyncType::get_url(self, req, connectors)?)
-                .attach_default_headers()
-                .headers(types::PaymentsSyncType::get_headers(self, req, connectors)?)
-                .set_body(types::PaymentsSyncType::get_request_body(
-                    self, req, connectors,
-                )?)
-                .build(),
-        ))
-    }
-
-    fn handle_response(
-        &self,
-        data: &types::PaymentsSyncRouterData,
-        event_builder: Option<&mut ConnectorEvent>,
-        res: Response,
-    ) -> CustomResult<types::PaymentsSyncRouterData, errors::ConnectorError> {
-        let response: plaid::PlaidSyncResponse = res
-            .response
-            .parse_struct("PlaidSyncResponse")
-            .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
-        event_builder.map(|i| i.set_response_body(&response));
-        router_env::logger::info!(connector_response=?response);
-        types::RouterData::try_from(types::ResponseRouterData {
-            response,
-            data: data.clone(),
-            http_code: res.status_code,
-        })
-    }
-
-    fn get_error_response(
-        &self,
-        res: Response,
-        event_builder: Option<&mut ConnectorEvent>,
-    ) -> CustomResult<ErrorResponse, errors::ConnectorError> {
-        self.build_error_response(res, event_builder)
-    }
-}
-
-impl
-    ConnectorIntegration<
-        api::PostProcessing,
-        types::PaymentsPostProcessingData,
-        types::PaymentsResponseData,
-    > for Plaid
-{
-    fn get_headers(
-        &self,
-        req: &types::PaymentsPostProcessingRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
-        self.build_headers(req, connectors)
-    }
-
-    fn get_content_type(&self) -> &'static str {
-        self.common_get_content_type()
-    }
-
-    fn get_url(
-        &self,
-        _req: &types::PaymentsPostProcessingRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<String, errors::ConnectorError> {
-        Ok(format!("{}/link/token/create", self.base_url(connectors)))
-    }
-
-    fn get_request_body(
-        &self,
-        req: &types::PaymentsPostProcessingRouterData,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<RequestContent, errors::ConnectorError> {
-        let connector_req = plaid::PlaidLinkTokenRequest::try_from(req)?;
-        Ok(RequestContent::Json(Box::new(connector_req)))
-    }
-
-    fn build_request(
-        &self,
-        req: &types::PaymentsPostProcessingRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
-        Ok(Some(
-            services::RequestBuilder::new()
-                .method(services::Method::Post)
-                .url(&types::PaymentsPostProcessingType::get_url(
-                    self, req, connectors,
-                )?)
-                .attach_default_headers()
-                .headers(types::PaymentsPostProcessingType::get_headers(
-                    self, req, connectors,
-                )?)
-                .set_body(types::PaymentsPostProcessingType::get_request_body(
-                    self, req, connectors,
-                )?)
-                .build(),
-        ))
-    }
-
-    fn handle_response(
-        &self,
-        data: &types::PaymentsPostProcessingRouterData,
-        event_builder: Option<&mut ConnectorEvent>,
-        res: Response,
-    ) -> CustomResult<types::PaymentsPostProcessingRouterData, errors::ConnectorError> {
-        let response: plaid::PlaidLinkTokenResponse = res
-            .response
-            .parse_struct("PlaidLinkTokenResponse")
-            .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
-        event_builder.map(|i| i.set_response_body(&response));
-        router_env::logger::info!(connector_response=?response);
-        types::RouterData::try_from(types::ResponseRouterData {
-            response,
-            data: data.clone(),
-            http_code: res.status_code,
-        })
-    }
-
-    fn get_error_response(
-        &self,
-        res: Response,
-        event_builder: Option<&mut ConnectorEvent>,
-    ) -> CustomResult<ErrorResponse, errors::ConnectorError> {
-        self.build_error_response(res, event_builder)
-    }
-}
-
-impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::PaymentsResponseData>
-    for Plaid
-{
-}
-
-impl ConnectorIntegration<api::Void, types::PaymentsCancelData, types::PaymentsResponseData>
-    for Plaid
-{
-}
-
-impl ConnectorIntegration<api::Execute, types::RefundsData, types::RefundsResponseData> for Plaid {}
-
-impl ConnectorIntegration<api::RSync, types::RefundsData, types::RefundsResponseData> for Plaid {}
-
-#[async_trait::async_trait]
-impl api::IncomingWebhook for Plaid {
-    fn get_webhook_object_reference_id(
-        &self,
-        _request: &api::IncomingWebhookRequestDetails<'_>,
-    ) -> CustomResult<api::webhooks::ObjectReferenceId, errors::ConnectorError> {
-        Err((errors::ConnectorError::WebhooksNotImplemented).into())
-    }
-
-    fn get_webhook_event_type(
-        &self,
-        _request: &api::IncomingWebhookRequestDetails<'_>,
-    ) -> CustomResult<api::IncomingWebhookEvent, errors::ConnectorError> {
-        Err((errors::ConnectorError::WebhooksNotImplemented).into())
-    }
-
-    fn get_webhook_resource_object(
-        &self,
-        _request: &api::IncomingWebhookRequestDetails<'_>,
-    ) -> CustomResult<Box<dyn masking::ErasedMaskSerialize>, errors::ConnectorError> {
-        Err((errors::ConnectorError::WebhooksNotImplemented).into())
-    }
-}
-
-impl ConnectorSpecifications for Plaid {}
diff --git a/crates/router/src/connector/utils.rs b/crates/router/src/connector/utils.rs
index 1c071a10e3d..e0034a63335 100644
--- a/crates/router/src/connector/utils.rs
+++ b/crates/router/src/connector/utils.rs
@@ -1222,66 +1222,6 @@ impl PaymentsPostSessionTokensRequestData for types::PaymentsPostSessionTokensDa
     }
 }
 
-#[cfg(feature = "payouts")]
-pub trait CustomerDetails {
-    fn get_customer_id(&self) -> Result<id_type::CustomerId, errors::ConnectorError>;
-    fn get_customer_name(
-        &self,
-    ) -> Result<Secret<String, masking::WithType>, errors::ConnectorError>;
-    fn get_customer_email(&self) -> Result<Email, errors::ConnectorError>;
-    fn get_customer_phone(
-        &self,
-    ) -> Result<Secret<String, masking::WithType>, errors::ConnectorError>;
-    fn get_customer_phone_country_code(&self) -> Result<String, errors::ConnectorError>;
-}
-
-#[cfg(feature = "payouts")]
-impl CustomerDetails for types::CustomerDetails {
-    fn get_customer_id(&self) -> Result<id_type::CustomerId, errors::ConnectorError> {
-        self.customer_id
-            .clone()
-            .ok_or(errors::ConnectorError::MissingRequiredField {
-                field_name: "customer_id",
-            })
-    }
-
-    fn get_customer_name(
-        &self,
-    ) -> Result<Secret<String, masking::WithType>, errors::ConnectorError> {
-        self.name
-            .clone()
-            .ok_or(errors::ConnectorError::MissingRequiredField {
-                field_name: "customer_name",
-            })
-    }
-
-    fn get_customer_email(&self) -> Result<Email, errors::ConnectorError> {
-        self.email
-            .clone()
-            .ok_or(errors::ConnectorError::MissingRequiredField {
-                field_name: "customer_email",
-            })
-    }
-
-    fn get_customer_phone(
-        &self,
-    ) -> Result<Secret<String, masking::WithType>, errors::ConnectorError> {
-        self.phone
-            .clone()
-            .ok_or(errors::ConnectorError::MissingRequiredField {
-                field_name: "customer_phone",
-            })
-    }
-
-    fn get_customer_phone_country_code(&self) -> Result<String, errors::ConnectorError> {
-        self.phone_country_code
-            .clone()
-            .ok_or(errors::ConnectorError::MissingRequiredField {
-                field_name: "customer_phone_country_code",
-            })
-    }
-}
-
 pub trait PaymentsCancelRequestData {
     fn get_amount(&self) -> Result<i64, Error>;
     fn get_currency(&self) -> Result<enums::Currency, Error>;
diff --git a/crates/router/src/core/admin.rs b/crates/router/src/core/admin.rs
index 07184065c1f..c8738fa1203 100644
--- a/crates/router/src/core/admin.rs
+++ b/crates/router/src/core/admin.rs
@@ -14,7 +14,6 @@ use diesel_models::configs;
 #[cfg(all(any(feature = "v1", feature = "v2"), feature = "olap"))]
 use diesel_models::{business_profile::CardTestingGuardConfig, organization::OrganizationBridge};
 use error_stack::{report, FutureExt, ResultExt};
-use hyperswitch_connectors::connectors::{chargebee, recurly};
 use hyperswitch_domain_models::merchant_connector_account::{
     FromRequestEncryptableMerchantConnectorAccount, UpdateEncryptableMerchantConnectorAccount,
 };
diff --git a/crates/router/src/core/payments/flows.rs b/crates/router/src/core/payments/flows.rs
index 5fc4959bef2..68daf6f1531 100644
--- a/crates/router/src/core/payments/flows.rs
+++ b/crates/router/src/core/payments/flows.rs
@@ -218,11 +218,6 @@ impl<const T: u8>
 }
 
 default_imp_for_complete_authorize!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Stripe,
     connector::Threedsecureio,
@@ -256,11 +251,6 @@ impl<const T: u8>
 {
 }
 default_imp_for_webhook_source_verification!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Stripe,
     connector::Threedsecureio,
@@ -296,11 +286,6 @@ impl<const T: u8>
 }
 
 default_imp_for_create_customer!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Threedsecureio,
     connector::Wellsfargopayout,
@@ -337,11 +322,6 @@ impl<const T: u8> services::ConnectorRedirectResponse for connector::DummyConnec
 }
 
 default_imp_for_connector_redirect_response!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Threedsecureio,
     connector::Wellsfargopayout,
@@ -360,11 +340,6 @@ macro_rules! default_imp_for_connector_request_id {
 impl<const T: u8> api::ConnectorTransactionId for connector::DummyConnector<T> {}
 
 default_imp_for_connector_request_id!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Stripe,
     connector::Threedsecureio,
@@ -403,11 +378,6 @@ impl<const T: u8>
 }
 
 default_imp_for_accept_dispute!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Stripe,
     connector::Threedsecureio,
@@ -465,11 +435,6 @@ impl<const T: u8>
 }
 
 default_imp_for_file_upload!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Threedsecureio,
     connector::Wellsfargopayout,
@@ -504,11 +469,6 @@ impl<const T: u8>
 }
 
 default_imp_for_submit_evidence!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Threedsecureio,
     connector::Wellsfargopayout,
@@ -543,11 +503,6 @@ impl<const T: u8>
 }
 
 default_imp_for_defend_dispute!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Stripe,
     connector::Threedsecureio,
@@ -598,11 +553,6 @@ impl<const T: u8>
 }
 
 default_imp_for_pre_processing_steps!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Stripe,
     connector::Threedsecureio,
@@ -623,11 +573,7 @@ impl<const T: u8>
 }
 
 default_imp_for_post_processing_steps!(
-    connector::Adyenplatform,
     connector::Stripe,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
     connector::Signifyd,
     connector::Threedsecureio,
     connector::Wellsfargopayout,
@@ -646,9 +592,6 @@ macro_rules! default_imp_for_payouts {
 impl<const T: u8> Payouts for connector::DummyConnector<T> {}
 
 default_imp_for_payouts!(
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Threedsecureio,
     connector::Wellsfargopayout
@@ -683,10 +626,6 @@ impl<const T: u8>
 
 #[cfg(feature = "payouts")]
 default_imp_for_payouts_create!(
-    connector::Adyenplatform,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Threedsecureio,
     connector::Wellsfargopayout
@@ -721,11 +660,6 @@ impl<const T: u8>
 
 #[cfg(feature = "payouts")]
 default_imp_for_payouts_retrieve!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Stripe,
     connector::Threedsecureio,
@@ -765,10 +699,6 @@ impl<const T: u8>
 
 #[cfg(feature = "payouts")]
 default_imp_for_payouts_eligibility!(
-    connector::Adyenplatform,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Stripe,
     connector::Threedsecureio,
@@ -804,9 +734,6 @@ impl<const T: u8>
 
 #[cfg(feature = "payouts")]
 default_imp_for_payouts_fulfill!(
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Threedsecureio,
     connector::Wellsfargopayout
@@ -841,10 +768,6 @@ impl<const T: u8>
 
 #[cfg(feature = "payouts")]
 default_imp_for_payouts_cancel!(
-    connector::Adyenplatform,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Threedsecureio,
     connector::Wellsfargopayout
@@ -879,10 +802,6 @@ impl<const T: u8>
 
 #[cfg(feature = "payouts")]
 default_imp_for_payouts_quote!(
-    connector::Adyenplatform,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Stripe,
     connector::Threedsecureio,
@@ -918,10 +837,6 @@ impl<const T: u8>
 
 #[cfg(feature = "payouts")]
 default_imp_for_payouts_recipient!(
-    connector::Adyenplatform,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Threedsecureio,
     connector::Wellsfargopayout
@@ -959,11 +874,6 @@ impl<const T: u8>
 
 #[cfg(feature = "payouts")]
 default_imp_for_payouts_recipient_account!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Threedsecureio,
     connector::Wellsfargopayout,
@@ -998,11 +908,6 @@ impl<const T: u8>
 }
 
 default_imp_for_approve!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Stripe,
     connector::Threedsecureio,
@@ -1038,11 +943,6 @@ impl<const T: u8>
 }
 
 default_imp_for_reject!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Stripe,
     connector::Threedsecureio,
@@ -1064,11 +964,6 @@ impl<const T: u8> api::FraudCheck for connector::DummyConnector<T> {}
 
 #[cfg(feature = "frm")]
 default_imp_for_fraud_check!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Stripe,
     connector::Threedsecureio,
     connector::Wellsfargopayout,
@@ -1105,11 +1000,6 @@ impl<const T: u8>
 
 #[cfg(feature = "frm")]
 default_imp_for_frm_sale!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Stripe,
     connector::Threedsecureio,
     connector::Wellsfargopayout,
@@ -1146,11 +1036,6 @@ impl<const T: u8>
 
 #[cfg(feature = "frm")]
 default_imp_for_frm_checkout!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Stripe,
     connector::Threedsecureio,
     connector::Wellsfargopayout,
@@ -1187,11 +1072,6 @@ impl<const T: u8>
 
 #[cfg(feature = "frm")]
 default_imp_for_frm_transaction!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Stripe,
     connector::Threedsecureio,
     connector::Wellsfargopayout,
@@ -1228,11 +1108,6 @@ impl<const T: u8>
 
 #[cfg(feature = "frm")]
 default_imp_for_frm_fulfillment!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Stripe,
     connector::Threedsecureio,
     connector::Wellsfargopayout,
@@ -1269,11 +1144,6 @@ impl<const T: u8>
 
 #[cfg(feature = "frm")]
 default_imp_for_frm_record_return!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Stripe,
     connector::Threedsecureio,
     connector::Wellsfargopayout,
@@ -1308,11 +1178,6 @@ impl<const T: u8>
 }
 
 default_imp_for_incremental_authorization!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Stripe,
     connector::Threedsecureio,
@@ -1346,11 +1211,6 @@ impl<const T: u8>
 {
 }
 default_imp_for_revoking_mandates!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Stripe,
     connector::Threedsecureio,
@@ -1444,9 +1304,6 @@ impl<const T: u8>
 {
 }
 default_imp_for_connector_authentication!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Plaid,
     connector::Signifyd,
     connector::Stripe,
     connector::Wellsfargopayout,
@@ -1478,11 +1335,6 @@ impl<const T: u8>
 {
 }
 default_imp_for_authorize_session_token!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Stripe,
     connector::Threedsecureio,
@@ -1516,11 +1368,6 @@ impl<const T: u8>
 }
 
 default_imp_for_calculate_tax!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Stripe,
     connector::Threedsecureio,
@@ -1554,11 +1401,6 @@ impl<const T: u8>
 }
 
 default_imp_for_session_update!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Stripe,
     connector::Threedsecureio,
@@ -1592,11 +1434,6 @@ impl<const T: u8>
 }
 
 default_imp_for_post_session_tokens!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Stripe,
     connector::Threedsecureio,
@@ -1630,11 +1467,6 @@ impl<const T: u8>
 }
 
 default_imp_for_update_metadata!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Threedsecureio,
     connector::Wellsfargopayout,
@@ -1670,11 +1502,6 @@ impl<const T: u8>
 }
 
 default_imp_for_uas_pre_authentication!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Stripe,
     connector::Threedsecureio,
@@ -1708,11 +1535,6 @@ impl<const T: u8>
 }
 
 default_imp_for_uas_post_authentication!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Stripe,
     connector::Threedsecureio,
@@ -1735,11 +1557,6 @@ macro_rules! default_imp_for_uas_authentication_confirmation {
 }
 
 default_imp_for_uas_authentication_confirmation!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Stripe,
     connector::Threedsecureio,
@@ -1786,11 +1603,6 @@ impl<const T: u8>
 }
 
 default_imp_for_uas_authentication!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Stripe,
     connector::Threedsecureio,
@@ -1919,12 +1731,6 @@ macro_rules! default_imp_for_revenue_recovery {
 impl<const T: u8> api::RevenueRecovery for connector::DummyConnector<T> {}
 
 default_imp_for_revenue_recovery! {
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
-
     connector::Signifyd,
     connector::Stripe,
     connector::Threedsecureio,
@@ -1962,11 +1768,6 @@ impl<const T: u8>
 
 #[cfg(all(feature = "v2", feature = "revenue_recovery"))]
 default_imp_for_billing_connector_payment_sync!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Stripe,
     connector::Threedsecureio,
@@ -2004,11 +1805,6 @@ impl<const T: u8>
 }
 #[cfg(all(feature = "v2", feature = "revenue_recovery"))]
 default_imp_for_revenue_recovery_record_back!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Stripe,
     connector::Threedsecureio,
@@ -2046,11 +1842,6 @@ impl<const T: u8>
 }
 #[cfg(all(feature = "v2", feature = "revenue_recovery"))]
 default_imp_for_billing_connector_invoice_sync!(
-    connector::Adyenplatform,
-    connector::Ebanx,
-    connector::Gpayments,
-    connector::Netcetera,
-    connector::Plaid,
     connector::Signifyd,
     connector::Stripe,
     connector::Threedsecureio,

## Type of Change
<!-- Put an `x` in the boxes that apply -->

- [ ] Bugfix
- [ ] New feature
- [ ] Enhancement
- [x] Refactoring
- [ ] Dependency updates
- [ ] Documentation
- [ ] CI/CD

## Description
<!-- Describe your changes in detail -->
Moving connectors from `crates/router` to `crates/hyperswitch_connectors`
1. adyenplatform
2. ebanx
3. gpayments
4. netcetera 
5. plaid

issue: https://github.com/juspay/hyperswitch/issues/7916 

### Additional Changes

- [ ] This PR modifies the API contract
- [ ] This PR modifies the database schema
- [ ] This PR modifies application configuration/environment variables

<!--
Provide links to the files with corresponding changes.

Following are the paths where you can find config files:
1. `config`
7. `crates/router/src/configs`
8. `loadtest/config`
-->


## Motivation and Context
<!--
Why is this change required? What problem does it solve?
If it fixes an open issue, please link to the issue here.

If you don't have an issue, we'd recommend starting with one first so the PR
can focus on the implementation (unless it is an obvious bug or documentation fix
that will have little conversation).
-->


## How did you test it?
<!--
Did you write an integration/unit/API test to verify the code changes?
Or did you test this change manually (provide relevant screenshots)?
-->
**PLAID** REF PR : https://github.com/juspay/hyperswitch/pull/3952

1. create plaid MCA
```sh
curl --location 'http://localhost:8080/account/merchant_1745827786/connectors' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'x-feature: integ-custom' \
--header 'api-key: dev_3MQvYMIeRXwga5C0QQaHBqi6RzjIbIEgcenajXpGnqONwMEcwkx4SHzvduOEOTjF' \
--data '{
    "connector_type": "payment_processor",
    "connector_name": "plaid",
    "connector_account_details": {
        "auth_type": "BodyKey",
        "api_key": "***",
        "key1": "***"
    },
    "payment_methods_enabled": [
        {
            "payment_method": "open_banking",
            "payment_method_types": [
                {
                    "payment_method_type": "open_banking_pis",
                    "payment_experience": "redirect_to_url",
                    "card_networks": null,
                    "accepted_currencies": {
                        "type": "enable_only",
                        "list": [
                            "EUR",
                            "GBP"
                        ]
                    },
                    "accepted_countries": null,
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": true
                }
            ]
        }
    ],
    "connector_webhook_details": null,
    "metadata": {
        "city": "NY",
        "unit": "246"
    },
    "test_mode": false,
    "disabled": false,
    "frm_configs": null,
    "business_country": null,
    "business_label": null,
    "business_sub_label": null,
    "pm_auth_config": null,
    "status": "active",
    "additional_merchant_data": {
        "open_banking_recipient_data": {
            "account_data": {
                "bacs": {
                    "account_number": "55779911",
                    "sort_code": "200000",
                    "name": "merchant_name",
                    "connector_recipient_id": "recipient-id-sandbox-45beb880-9e3d-4ae3-927b-052f5610fd74"
                }
            }
        }
    }
}’
```
2. create payment
```sh

curl --location 'http://localhost:8080/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_3MQvYMIeRXwga5C0QQaHBqi6RzjIbIEgcenajXpGnqONwMEcwkx4SHzvduOEOTjF' \
--data-raw '{
    "amount": 200,
    "currency": "GBP",
    "confirm": false,
    "capture_method": "automatic",
    "capture_on": "2022-09-10T10:11:12Z",
    "email": "guest@example.com",
    "name": "John Doe", 
    "phone": "999999999",
    "phone_country_code": "+1",
    "description": "Its my first payment request",
    "authentication_type": "no_three_ds",
    "return_url": "https://google.com",
    "billing": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "GB",
            "first_name": "john",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        }
    },
    "shipping": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "GB",
            "first_name": "joseph",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594430",
            "country_code": "+91"
        }
    },
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "metadata": {
        "udf1": "value1",
        "new_customer": "true",
        "login_date": "2019-09-10T10:11:12Z"
    }
}’
```
SUCCESS RESPONSE 

```json
{
    "payment_id": "pay_YHCSrBabp6msKIdaaMaI",
    "merchant_id": "merchant_1745827786",
    "status": "requires_payment_method",
    "amount": 200,
    "net_amount": 200,
    "shipping_cost": null,
    "amount_capturable": 0,
    "amount_received": null,
    "connector": null,
    "client_secret": "pay_YHCSrBabp6msKIdaaMaI_secret_kUrGl5b5l986f5dcErNV",
    "created": "2025-04-28T08:10:06.811Z",
    "currency": "GBP",
    "customer_id": null,
    "customer": {
        "id": null,
        "name": "John Doe",
        "email": "guest@example.com",
        "phone": "999999999",
        "phone_country_code": "+1"
    },
    "description": "Its my first payment request",
    "refunds": null,
    "disputes": null,
    "mandate_id": null,
    "mandate_data": null,
    "setup_future_usage": null,
    "off_session": null,
    "capture_on": null,
    "capture_method": "automatic",
    "payment_method": null,
    "payment_method_data": null,
    "payment_token": null,
    "shipping": {
        "address": {
            "city": "San Fransico",
            "country": "GB",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "joseph",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594430",
            "country_code": "+91"
        },
        "email": null
    },
    "billing": {
        "address": {
            "city": "San Fransico",
            "country": "GB",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "john",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": null
    },
    "order_details": null,
    "email": null,
    "name": null,
    "phone": null,
    "return_url": "https://google.com/",
    "authentication_type": "no_three_ds",
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "next_action": null,
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": null,
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": null,
    "manual_retry_allowed": null,
    "connector_transaction_id": null,
    "frm_message": null,
    "metadata": {
        "udf1": "value1",
        "login_date": "2019-09-10T10:11:12Z",
        "new_customer": "true"
    },
    "connector_metadata": null,
    "feature_metadata": null,
    "reference_id": null,
    "payment_link": null,
    "profile_id": "pro_J7WGw473DjsyTN52d0hJ",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": null,
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2025-04-28T08:25:06.811Z",
    "fingerprint": null,
    "browser_info": null,
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2025-04-28T08:10:06.841Z",
    "split_payments": null,
    "frm_metadata": null,
    "extended_authorization_applied": null,
    "capture_before": null,
    "merchant_order_reference_id": null,
    "order_tax_amount": null,
    "connector_mandate_id": null,
    "card_discovery": null,
    "force_3ds_challenge": false,
    "force_3ds_challenge_trigger": false,
    "issuer_error_code": null,
    "issuer_error_message": null
}
```
3. CONFIRM

```sh
curl --location 'http://localhost:8080/payments/pay_YHCSrBabp6msKIdaaMaI/confirm' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_3MQvYMIeRXwga5C0QQaHBqi6RzjIbIEgcenajXpGnqONwMEcwkx4SHzvduOEOTjF' \
--data '{
    "payment_method": "open_banking",
    "payment_method_type": "open_banking_pis",
    
    "payment_method_data": {
        "open_banking": {
            "open_banking_pis": {}
        }
    }
}’
```
response

Successful response will have status as requires_customer_action and next_action as third_party_sdk_session_token -

```json
{
    "payment_id": "pay_YHCSrBabp6msKIdaaMaI",
    "merchant_id": "merchant_1745827786",
    "status": "requires_customer_action",
    "amount": 200,
    "net_amount": 200,
    "shipping_cost": null,
    "amount_capturable": 200,
    "amount_received": null,
    "connector": "plaid",
    "client_secret": "pay_YHCSrBabp6msKIdaaMaI_secret_kUrGl5b5l986f5dcErNV",
    "created": "2025-04-28T08:10:06.811Z",
    "currency": "GBP",
    "customer_id": null,
    "customer": {
        "id": null,
        "name": "John Doe",
        "email": "guest@example.com",
        "phone": "999999999",
        "phone_country_code": "+1"
    },
    "description": "Its my first payment request",
    "refunds": null,
    "disputes": null,
    "mandate_id": null,
    "mandate_data": null,
    "setup_future_usage": null,
    "off_session": null,
    "capture_on": null,
    "capture_method": "automatic",
    "payment_method": "open_banking",
    "payment_method_data": {
        "open_banking": {
            "open_banking_pis": {}
        },
        "billing": null
    },
    "payment_token": null,
    "shipping": {
        "address": {
            "city": "San Fransico",
            "country": "GB",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "joseph",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594430",
            "country_code": "+91"
        },
        "email": null
    },
    "billing": {
        "address": {
            "city": "San Fransico",
            "country": "GB",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "john",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": null
    },
    "order_details": null,
    "email": null,
    "name": null,
    "phone": null,
    "return_url": "https://google.com/",
    "authentication_type": "no_three_ds",
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "next_action": {
        "type": "third_party_sdk_session_token",
        "session_token": {
            "wallet_name": "open_banking",
            "open_banking_session_token": "link-sandbox-13e756c7-45e2-4841-b10d-fd97627ba501"
        }
    },
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": "open_banking_pis",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": null,
    "manual_retry_allowed": null,
    "connector_transaction_id": "payment-id-sandbox-2d044d64-b713-433d-b249-f99d47c1fbac",
    "frm_message": null,
    "metadata": {
        "udf1": "value1",
        "login_date": "2019-09-10T10:11:12Z",
        "new_customer": "true"
    },
    "connector_metadata": null,
    "feature_metadata": null,
    "reference_id": "payment-id-sandbox-2d044d64-b713-433d-b249-f99d47c1fbac",
    "payment_link": null,
    "profile_id": "pro_J7WGw473DjsyTN52d0hJ",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_3r6Sr9CClmCPCuXIEzKV",
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2025-04-28T08:25:06.811Z",
    "fingerprint": null,
    "browser_info": {
        "os_type": null,
        "language": null,
        "time_zone": null,
        "ip_address": "::1",
        "os_version": null,
        "user_agent": null,
        "color_depth": null,
        "device_model": null,
        "java_enabled": null,
        "screen_width": null,
        "accept_header": null,
        "screen_height": null,
        "accept_language": "en",
        "java_script_enabled": null
    },
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2025-04-28T08:21:50.132Z",
    "split_payments": null,
    "frm_metadata": null,
    "extended_authorization_applied": null,
    "capture_before": null,
    "merchant_order_reference_id": null,
    "order_tax_amount": null,
    "connector_mandate_id": null,
    "card_discovery": null,
    "force_3ds_challenge": false,
    "force_3ds_challenge_trigger": false,
    "issuer_error_code": null,
    "issuer_error_message": null
}
```
NETCETERA

1. CREATE Netcetera auth processor and checkout payment processor

2. Update Business profile for auth flow
```sh
curl --location 'http://localhost:8080/account/merchant_1745840350/business_profile/pro_5ue8hhxsHkXzCanhT2CW' \
--header 'Content-Type: application/json' \
--header 'api-key: dev_5gY5nna8FN6u9l7H7ilO3ksCW3LkoypGaOLhZV5ScNxfw1lw8xksxWyIFsZsZVTD' \
--data '{
    "profile_name": "grocery",
    "authentication_connector_details": {
        "authentication_connectors": [
            "netcetera"
        ],
        "three_ds_requestor_url": "https://3dss-pp-prev-ndm.acquiring.test.netcetera.com/acs/3ds-method"
    }
}'
```
3. create payment  whith    `"request_external_three_ds_authentication": true`
```sh
curl --location 'http://localhost:8080/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_5gY5nna8FN6u9l7H7ilO3ksCW3LkoypGaOLhZV5ScNxfw1lw8xksxWyIFsZsZVTD' \
--data-raw '{
    "amount": 100,
    "currency": "USD",
    "confirm": false,
    "capture_method": "automatic",
    "capture_on": "2022-09-10T10:11:12Z",
    "amount_to_capture": 100,
    "customer_id": "StripeCustomer",
    "email": "guest@example.com",
    "name": "John Doe",
    "phone": "999999999",
    "phone_country_code": "+65",
    "description": "Its my first payment request",
    "authentication_type": "three_ds",
    "return_url": "https://duck.com",
    "billing": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "US",
            "first_name": "PiX"
        },
        "phone": {
            "number": "123456789",
            "country_code": "12"
        }
    },
    "shipping": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "US",
            "first_name": "PiX"
        },
        "phone": {
            "number": "123456789",
            "country_code": "12"
        }
    },
    "request_external_three_ds_authentication": true,
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "metadata": {
        "udf1": "value1",
        "new_customer": "true",
        "login_date": "2019-09-10T10:11:12Z"
    }
}'
```
Response `"status"="requires_payment_method",`
4. Payment confirm
```sh
curl --location 'http://localhost:8080/payments/pay_re3vpR4Dwn6MNmO2xogp/confirm' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_5gY5nna8FN6u9l7H7ilO3ksCW3LkoypGaOLhZV5ScNxfw1lw8xksxWyIFsZsZVTD' \
--data '{
    "browser_info": {
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
        "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "language": "nl-NL",
        "color_depth": 24,
        "screen_height": 723,
        "screen_width": 1536,
        "time_zone": 0,
        "java_enabled": true,
        "java_script_enabled": true,
        "ip_address": "115.99.183.2"
    },
    
    "payment_method": "card",
    "payment_method_data": {
        "card": {
            "card_number": "4929251897047956", 
            "card_exp_month": "10",
            "card_exp_year": "25",
            "card_holder_name": "joseph Doe",
            "card_cvc": "123"
        }
    }
}'`

Response : 
```json
{
    "payment_id": "pay_re3vpR4Dwn6MNmO2xogp",
    "merchant_id": "merchant_1745840350",
    "status": "requires_customer_action",
    "amount": 100,
    "net_amount": 100,
    "shipping_cost": null,
    "amount_capturable": 100,
    "amount_received": null,
    "connector": "checkout",
    "client_secret": "pay_re3vpR4Dwn6MNmO2xogp_secret_q1EZvfdAPSkIZY6eCXhf",
    "created": "2025-04-28T12:47:07.085Z",
    "currency": "USD",
    "customer_id": "StripeCustomer",
    "customer": {
        "id": "StripeCustomer",
        "name": "John Doe",
        "email": "guest@example.com",
        "phone": "999999999",
        "phone_country_code": "+65"
    },
    "description": "Its my first payment request",
    "refunds": null,
    "disputes": null,
    "mandate_id": null,
    "mandate_data": null,
    "setup_future_usage": null,
    "off_session": null,
    "capture_on": null,
    "capture_method": "automatic",
    "payment_method": "card",
    "payment_method_data": {
        "card": {
            "last4": "7956",
            "card_type": null,
            "card_network": null,
            "card_issuer": null,
            "card_issuing_country": null,
            "card_isin": "492925",
            "card_extended_bin": null,
            "card_exp_month": "10",
            "card_exp_year": "25",
            "card_holder_name": "joseph Doe",
            "payment_checks": null,
            "authentication_data": null
        },
        "billing": null
    },
    "payment_token": "token_Oj4F2UQ4PIN3h9uejq9S",
    "shipping": {
        "address": {
            "city": "San Fransico",
            "country": "US",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": {
            "number": "123456789",
            "country_code": "12"
        },
        "email": null
    },
    "billing": {
        "address": {
            "city": "San Fransico",
            "country": "US",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": {
            "number": "123456789",
            "country_code": "12"
        },
        "email": null
    },
    "order_details": null,
    "email": "guest@example.com",
    "name": "John Doe",
    "phone": "999999999",
    "return_url": "https://duck.com/",
    "authentication_type": "three_ds",
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "next_action": {
        "type": "three_ds_invoke",
        "three_ds_data": {
            "three_ds_authentication_url": "http://localhost:8080/payments/pay_re3vpR4Dwn6MNmO2xogp/3ds/authentication",
            "three_ds_authorize_url": "http://localhost:8080/payments/pay_re3vpR4Dwn6MNmO2xogp/merchant_1745840350/authorize/checkout",
            "three_ds_method_details": {
                "three_ds_method_key": "threeDSMethodData",
                "three_ds_method_data_submission": true,
                "three_ds_method_data": "eyJ0aHJlZURTTWV0aG9kTm90aWZpY2F0aW9uVVJMIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS8zZHMtbWV0aG9kLW5vdGlmaWNhdGlvbi11cmwiLCJ0aHJlZURTU2VydmVyVHJhbnNJRCI6IjY5YjU4NzlmLTIwYWEtNGIxMi1hNjFkLTg1YTg0NzZmZjdmNyJ9",
                "three_ds_method_url": "https://ndm-prev.3dss-non-prod.cloud.netcetera.com/acs/3ds-method"
            },
            "poll_config": {
                "poll_id": "external_authentication_pay_re3vpR4Dwn6MNmO2xogp",
                "delay_in_secs": 2,
                "frequency": 5
            },
            "message_version": "2.3.1",
            "directory_server_id": "A000000003"
        }
    },
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": null,
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": null,
    "manual_retry_allowed": null,
    "connector_transaction_id": null,
    "frm_message": null,
    "metadata": {
        "udf1": "value1",
        "login_date": "2019-09-10T10:11:12Z",
        "new_customer": "true"
    },
    "connector_metadata": null,
    "feature_metadata": null,
    "reference_id": null,
    "payment_link": null,
    "profile_id": "pro_5ue8hhxsHkXzCanhT2CW",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_s8Vw96XBCTmvBGMGqEj5",
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": {
        "authentication_flow": null,
        "electronic_commerce_indicator": null,
        "status": "pending",
        "ds_transaction_id": "69b5879f-20aa-4b12-a61d-85a8476ff7f7",
        "version": "2.3.1",
        "error_code": null,
        "error_message": null
    },
    "external_3ds_authentication_attempted": true,
    "expires_on": "2025-04-28T13:02:07.085Z",
    "fingerprint": null,
    "browser_info": {
        "os_type": null,
        "language": "nl-NL",
        "time_zone": 0,
        "ip_address": "115.99.183.2",
        "os_version": null,
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
        "color_depth": 24,
        "device_model": null,
        "java_enabled": true,
        "screen_width": 1536,
        "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "screen_height": 723,
        "accept_language": "en",
        "java_script_enabled": true
    },
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2025-04-28T12:47:19.403Z",
    "split_payments": null,
    "frm_metadata": null,
    "extended_authorization_applied": null,
    "capture_before": null,
    "merchant_order_reference_id": null,
    "order_tax_amount": null,
    "connector_mandate_id": null,
    "card_discovery": "manual",
    "force_3ds_challenge": false,
    "force_3ds_challenge_trigger": false,
    "issuer_error_code": null,
    "issuer_error_message": null
}
```

AYDENPLATFORM 

Create payout - adyenplatform supports only SEPA

- https://github.com/juspay/hyperswitch-cloud/issues/5414

```sh
curl --location 'http://localhost:8080/payouts/create' \
--header 'x-feature: integ-custom' \
--header 'Content-Type: application/json' \
--header 'api-key: dev_5gY5nna8FN6u9l7H7ilO3ksCW3LkoypGaOLhZV5ScNxfw1lw8xksxWyIFsZsZVTD' \
--data-raw '{
    "amount": 100,
    "currency": "EUR",
    "customer_id": "cus_BoR4qowJ8Fa872dKgQLD",
    "email": "payout_customer@example.com",
    "name": "John Doe",
    "phone": "999999999",
    "phone_country_code": "+65",
    "description": "Its my first payout request",
    "payout_type": "bank",
    "priority": "regular",
    "payout_method_data": {
        "bank": {
            "iban": "NL57INGB4654188101"
        }
    },
    "connector": [
        "adyenplatform"
    ],
    "billing": {
        "address": {
            "line1": "Raadhuisplein",
            "line2": "92",
            "city": "Hoogeveen",
            "state": "FL",
            "zip": "7901 BW",
            "country": "NL",
            "first_name": "John",
            "last_name": "Doe"
        },
        "phone": {
            "number": "0650242319",
            "country_code": "+31"
        }
    },
    "entity_type": "Individual",
    "recurring": true,
    "metadata": {
        "ref": "123"
    },
    "confirm": true,
    "auto_fulfill": false
}'
```
Response 
```json
{
    "payout_id": "8fac3092-81e4-4936-b619-713de4281e36",
    "merchant_id": "merchant_1745840350",
    "amount": 100,
    "currency": "EUR",
    "connector": "adyenplatform",
    "payout_type": "bank",
    "payout_method_data": {
        "bank": {
            "iban": "NL57I********88101",
            "bank_name": null,
            "bank_country_code": null,
            "bank_city": null,
            "bic": null
        }
    },
    "billing": {
        "address": {
            "city": "Hoogeveen",
            "country": "NL",
            "line1": "Raadhuisplein",
            "line2": "92",
            "line3": null,
            "zip": "7901 BW",
            "state": "FL",
            "first_name": "John",
            "last_name": "Doe"
        },
        "phone": {
            "number": "0650242319",
            "country_code": "+31"
        },
        "email": null
    },
    "auto_fulfill": false,
    "customer_id": "cus_BoR4qowJ8Fa872dKgQLD",
    "customer": {
        "id": "cus_BoR4qowJ8Fa872dKgQLD",
        "name": "John Doe",
        "email": "payout_customer@example.com",
        "phone": "999999999",
        "phone_country_code": "+65"
    },
    "client_secret": "payout_8fac3092-81e4-4936-b619-713de4281e36_secret_LMTGxKqCY3DViNkN3Y5x",
    "return_url": null,
    "business_country": null,
    "business_label": null,
    "description": "Its my first payout request",
    "entity_type": "Individual",
    "recurring": true,
    "metadata": {
        "ref": "123"
    },
    "merchant_connector_id": "mca_ZnBgWE1jKXg7Ogzvs0Ha",
    "status": "requires_fulfillment",
    "error_message": null,
    "error_code": null,
    "profile_id": "pro_5ue8hhxsHkXzCanhT2CW",
    "created": "2025-04-29T06:00:21.535Z",
    "connector_transaction_id": null,
    "priority": "regular",
    "payout_link": null,
    "email": "payout_customer@example.com",
    "name": "John Doe",
    "phone": "999999999",
    "phone_country_code": "+65",
    "unified_code": null,
    "unified_message": null,
    "payout_method_id": null
}
```
Fulfill

```sh
curl --location 'http://localhost:8080/payouts/8fac3092-81e4-4936-b619-713de4281e36/fulfill' \
--header 'x-feature: integ-custom' \
--header 'Content-Type: application/json' \
--header 'api-key: dev_5gY5nna8FN6u9l7H7ilO3ksCW3LkoypGaOLhZV5ScNxfw1lw8xksxWyIFsZsZVTD' \
--data '{
    "payout_id":"8fac3092-81e4-4936-b619-713de4281e36"
}'
```

```sh
{
    "payout_id": "8fac3092-81e4-4936-b619-713de4281e36",
    "merchant_id": "merchant_1745840350",
    "amount": 100,
    "currency": "EUR",
    "connector": "adyenplatform",
    "payout_type": "bank",
    "payout_method_data": {
        "bank": {
            "iban": "NL57I********88101",
            "bank_name": null,
            "bank_country_code": null,
            "bank_city": null,
            "bic": null
        }
    },
    "billing": {
        "address": {
            "city": "Hoogeveen",
            "country": "NL",
            "line1": "Raadhuisplein",
            "line2": "92",
            "line3": null,
            "zip": "7901 BW",
            "state": "FL",
            "first_name": "John",
            "last_name": "Doe"
        },
        "phone": {
            "number": "0650242319",
            "country_code": "+31"
        },
        "email": null
    },
    "auto_fulfill": false,
    "customer_id": "cus_BoR4qowJ8Fa872dKgQLD",
    "customer": {
        "id": "cus_BoR4qowJ8Fa872dKgQLD",
        "name": "John Doe",
        "email": "payout_customer@example.com",
        "phone": "999999999",
        "phone_country_code": "+65"
    },
    "client_secret": "payout_8fac3092-81e4-4936-b619-713de4281e36_secret_LMTGxKqCY3DViNkN3Y5x",
    "return_url": null,
    "business_country": null,
    "business_label": null,
    "description": "Its my first payout request",
    "entity_type": "Individual",
    "recurring": true,
    "metadata": {
        "ref": "123"
    },
    "merchant_connector_id": "mca_ZnBgWE1jKXg7Ogzvs0Ha",
    "status": "failed",
    "error_message": "Unauthorized",
    "error_code": "00_401",
    "profile_id": "pro_5ue8hhxsHkXzCanhT2CW",
    "created": "2025-04-29T06:00:21.535Z",
    "connector_transaction_id": null,
    "priority": "regular",
    "payout_link": null,
    "email": "payout_customer@example.com",
    "name": "John Doe",
    "phone": "999999999",
    "phone_country_code": "+65",
    "unified_code": null,
    "unified_message": null,
    "payout_method_id": null
}
```


## Checklist
<!-- Put an `x` in the boxes that apply -->

- [ ] I formatted the code `cargo +nightly fmt --all`
- [ ] I addressed lints thrown by `cargo clippy`
- [ ] I reviewed the submitted code
- [ ] I added unit tests for my changes where possible
