Bug: [FEATURE] [BAMBORA, BITPAY, STAX] Move connector code for stax to crate hyperswitch_connectors 



### Feature Description

Connector code for `bambora, bitpay and stax` needs to be moved from crate router to new crate hyperswitch_connectors

### Possible Implementation

Connector code for `bambora, bitpay and stax` needs to be moved from crate router to new crate hyperswitch_connectors

### Have you spent some time checking if this feature request has been raised before?

- [X] I checked and didn't find a similar issue

### Have you read the Contributing Guidelines?

- [X] I have read the [Contributing Guidelines](https://github.com/juspay/hyperswitch/blob/main/docs/CONTRIBUTING.md)

### Are you willing to submit a PR?

Yes, I am willing to submit a PR!
diff --git a/Cargo.lock b/Cargo.lock
index 45556ef401e..fde659c77c7 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3850,6 +3850,7 @@ dependencies = [
  "serde_json",
  "strum 0.26.2",
  "time",
+ "url",
  "uuid",
 ]
 
diff --git a/crates/common_enums/src/enums.rs b/crates/common_enums/src/enums.rs
index 3454a6ba020..2bd2e8c03b9 100644
--- a/crates/common_enums/src/enums.rs
+++ b/crates/common_enums/src/enums.rs
@@ -486,6 +486,25 @@ pub enum ConnectorType {
     AuthenticationProcessor,
 }
 
+#[derive(Debug, Eq, PartialEq)]
+pub enum PaymentAction {
+    PSync,
+    CompleteAuthorize,
+    PaymentAuthenticateCompleteAuthorize,
+}
+
+#[derive(Clone, PartialEq)]
+pub enum CallConnectorAction {
+    Trigger,
+    Avoid,
+    StatusUpdate {
+        status: AttemptStatus,
+        error_code: Option<String>,
+        error_message: Option<String>,
+    },
+    HandleResponse(Vec<u8>),
+}
+
 /// The three letter ISO currency code in uppercase. Eg: 'USD' for the United States Dollar.
 #[allow(clippy::upper_case_acronyms)]
 #[derive(
diff --git a/crates/hyperswitch_connectors/Cargo.toml b/crates/hyperswitch_connectors/Cargo.toml
index 30671d43bd9..2b199a3f722 100644
--- a/crates/hyperswitch_connectors/Cargo.toml
+++ b/crates/hyperswitch_connectors/Cargo.toml
@@ -18,6 +18,7 @@ serde = { version = "1.0.197", features = ["derive"] }
 serde_json = "1.0.115"
 strum = { version = "0.26", features = ["derive"] }
 time = "0.3.35"
+url = "2.5.0"
 uuid = { version = "1.8.0", features = ["v4"] }
 
 # First party crates
diff --git a/crates/hyperswitch_connectors/src/connectors.rs b/crates/hyperswitch_connectors/src/connectors.rs
index 0481939feb4..473ba5f6c85 100644
--- a/crates/hyperswitch_connectors/src/connectors.rs
+++ b/crates/hyperswitch_connectors/src/connectors.rs
@@ -1,4 +1,7 @@
+pub mod bambora;
+pub mod bitpay;
 pub mod fiserv;
 pub mod helcim;
+pub mod stax;
 
-pub use self::{fiserv::Fiserv, helcim::Helcim};
+pub use self::{bambora::Bambora, bitpay::Bitpay, fiserv::Fiserv, helcim::Helcim, stax::Stax};
diff --git a/crates/router/src/connector/bambora.rs b/crates/hyperswitch_connectors/src/connectors/bambora.rs
similarity index 64%
rename from crates/router/src/connector/bambora.rs
rename to crates/hyperswitch_connectors/src/connectors/bambora.rs
index 684c5ddc1ce..4731546b3d3 100644
--- a/crates/router/src/connector/bambora.rs
+++ b/crates/hyperswitch_connectors/src/connectors/bambora.rs
@@ -2,32 +2,54 @@ pub mod transformers;
 
 use std::fmt::Debug;
 
-use common_utils::request::RequestContent;
-use diesel_models::enums;
+use common_enums::enums;
+use common_utils::{
+    errors::CustomResult,
+    ext_traits::BytesExt,
+    request::{Method, Request, RequestBuilder, RequestContent},
+};
 use error_stack::{report, ResultExt};
-use transformers as bambora;
-
-use super::utils::RefundsRequestData;
-use crate::{
-    configs::settings,
-    connector::{utils as connector_utils, utils::to_connector_meta},
-    core::{
-        errors::{self, CustomResult},
-        payments,
+use hyperswitch_domain_models::{
+    router_data::{AccessToken, ConnectorAuthType, ErrorResponse, RouterData},
+    router_flow_types::{
+        access_token_auth::AccessTokenAuth,
+        payments::{Authorize, Capture, PSync, PaymentMethodToken, Session, SetupMandate, Void},
+        refunds::{Execute, RSync},
+        CompleteAuthorize,
     },
-    events::connector_api_logs::ConnectorEvent,
-    headers,
-    services::{
-        self,
-        request::{self, Mask},
-        ConnectorIntegration, ConnectorValidation,
+    router_request_types::{
+        AccessTokenRequestData, CompleteAuthorizeData, PaymentMethodTokenizationData,
+        PaymentsAuthorizeData, PaymentsCancelData, PaymentsCaptureData, PaymentsSessionData,
+        PaymentsSyncData, RefundsData, SetupMandateRequestData,
     },
+    router_response_types::{PaymentsResponseData, RefundsResponseData},
+    types::{
+        PaymentsAuthorizeRouterData, PaymentsCancelRouterData, PaymentsCaptureRouterData,
+        PaymentsCompleteAuthorizeRouterData, PaymentsSyncRouterData, RefundSyncRouterData,
+        RefundsRouterData,
+    },
+};
+use hyperswitch_interfaces::{
+    api::{
+        self, ConnectorCommon, ConnectorCommonExt, ConnectorIntegration, ConnectorRedirectResponse,
+        ConnectorValidation,
+    },
+    configs::Connectors,
+    errors,
+    events::connector_api_logs::ConnectorEvent,
     types::{
-        self,
-        api::{self, ConnectorCommon, ConnectorCommonExt},
-        ErrorResponse, Response,
+        self, PaymentsAuthorizeType, PaymentsCaptureType, PaymentsCompleteAuthorizeType,
+        PaymentsSyncType, PaymentsVoidType, Response,
     },
-    utils::BytesExt,
+    webhooks,
+};
+use masking::Mask;
+use transformers as bambora;
+
+use crate::{
+    constants::headers,
+    types::ResponseRouterData,
+    utils::{self, RefundsRequestData},
 };
 
 #[derive(Debug, Clone)]
@@ -53,12 +75,12 @@ where
 {
     fn build_headers(
         &self,
-        req: &types::RouterData<Flow, Request, Response>,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        req: &RouterData<Flow, Request, Response>,
+        _connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
         let mut header = vec![(
             headers::CONTENT_TYPE.to_string(),
-            types::PaymentsAuthorizeType::get_content_type(self)
+            PaymentsAuthorizeType::get_content_type(self)
                 .to_string()
                 .into(),
         )];
@@ -81,14 +103,14 @@ impl ConnectorCommon for Bambora {
         "application/json"
     }
 
-    fn base_url<'a>(&self, connectors: &'a settings::Connectors) -> &'a str {
+    fn base_url<'a>(&self, connectors: &'a Connectors) -> &'a str {
         connectors.bambora.base_url.as_ref()
     }
 
     fn get_auth_header(
         &self,
-        auth_type: &types::ConnectorAuthType,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        auth_type: &ConnectorAuthType,
+    ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
         let auth = bambora::BamboraAuthType::try_from(auth_type)
             .change_context(errors::ConnectorError::FailedToObtainAuthType)?;
         Ok(vec![(
@@ -114,7 +136,7 @@ impl ConnectorCommon for Bambora {
             status_code: res.status_code,
             code: response.code.to_string(),
             message: serde_json::to_string(&response.details)
-                .unwrap_or(crate::consts::NO_ERROR_MESSAGE.to_string()),
+                .unwrap_or(hyperswitch_interfaces::consts::NO_ERROR_MESSAGE.to_string()),
             reason: Some(response.message),
             attempt_status: None,
             connector_transaction_id: None,
@@ -132,49 +154,30 @@ impl ConnectorValidation for Bambora {
         match capture_method {
             enums::CaptureMethod::Automatic | enums::CaptureMethod::Manual => Ok(()),
             enums::CaptureMethod::ManualMultiple | enums::CaptureMethod::Scheduled => Err(
-                connector_utils::construct_not_implemented_error_report(capture_method, self.id()),
+                utils::construct_not_implemented_error_report(capture_method, self.id()),
             ),
         }
     }
 }
 
-impl
-    ConnectorIntegration<
-        api::PaymentMethodToken,
-        types::PaymentMethodTokenizationData,
-        types::PaymentsResponseData,
-    > for Bambora
+impl ConnectorIntegration<PaymentMethodToken, PaymentMethodTokenizationData, PaymentsResponseData>
+    for Bambora
 {
     // Not Implemented (R)
 }
 
-impl ConnectorIntegration<api::AccessTokenAuth, types::AccessTokenRequestData, types::AccessToken>
-    for Bambora
-{
-}
+impl ConnectorIntegration<AccessTokenAuth, AccessTokenRequestData, AccessToken> for Bambora {}
 
-impl ConnectorIntegration<api::Session, types::PaymentsSessionData, types::PaymentsResponseData>
-    for Bambora
-{
+impl ConnectorIntegration<Session, PaymentsSessionData, PaymentsResponseData> for Bambora {
     //TODO: implement sessions flow
 }
 
-impl
-    ConnectorIntegration<
-        api::SetupMandate,
-        types::SetupMandateRequestData,
-        types::PaymentsResponseData,
-    > for Bambora
-{
+impl ConnectorIntegration<SetupMandate, SetupMandateRequestData, PaymentsResponseData> for Bambora {
     fn build_request(
         &self,
-        _req: &types::RouterData<
-            api::SetupMandate,
-            types::SetupMandateRequestData,
-            types::PaymentsResponseData,
-        >,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        _req: &RouterData<SetupMandate, SetupMandateRequestData, PaymentsResponseData>,
+        _connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
         Err(
             errors::ConnectorError::NotImplemented("Setup Mandate flow for Bambora".to_string())
                 .into(),
@@ -182,14 +185,12 @@ impl
     }
 }
 
-impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::PaymentsResponseData>
-    for Bambora
-{
+impl ConnectorIntegration<Authorize, PaymentsAuthorizeData, PaymentsResponseData> for Bambora {
     fn get_headers(
         &self,
-        req: &types::PaymentsAuthorizeRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        req: &PaymentsAuthorizeRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
         self.build_headers(req, connectors)
     }
 
@@ -199,16 +200,16 @@ impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::P
 
     fn get_url(
         &self,
-        _req: &types::PaymentsAuthorizeRouterData,
-        connectors: &settings::Connectors,
+        _req: &PaymentsAuthorizeRouterData,
+        connectors: &Connectors,
     ) -> CustomResult<String, errors::ConnectorError> {
         Ok(format!("{}{}", self.base_url(connectors), "/v1/payments"))
     }
 
     fn get_request_body(
         &self,
-        req: &types::PaymentsAuthorizeRouterData,
-        _connectors: &settings::Connectors,
+        req: &PaymentsAuthorizeRouterData,
+        _connectors: &Connectors,
     ) -> CustomResult<RequestContent, errors::ConnectorError> {
         let connector_router_data = bambora::BamboraRouterData::try_from((
             &self.get_currency_unit(),
@@ -223,20 +224,16 @@ impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::P
 
     fn build_request(
         &self,
-        req: &types::PaymentsAuthorizeRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        req: &PaymentsAuthorizeRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
         Ok(Some(
-            services::RequestBuilder::new()
-                .method(services::Method::Post)
-                .url(&types::PaymentsAuthorizeType::get_url(
-                    self, req, connectors,
-                )?)
+            RequestBuilder::new()
+                .method(Method::Post)
+                .url(&PaymentsAuthorizeType::get_url(self, req, connectors)?)
                 .attach_default_headers()
-                .headers(types::PaymentsAuthorizeType::get_headers(
-                    self, req, connectors,
-                )?)
-                .set_body(types::PaymentsAuthorizeType::get_request_body(
+                .headers(PaymentsAuthorizeType::get_headers(self, req, connectors)?)
+                .set_body(PaymentsAuthorizeType::get_request_body(
                     self, req, connectors,
                 )?)
                 .build(),
@@ -245,10 +242,10 @@ impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::P
 
     fn handle_response(
         &self,
-        data: &types::PaymentsAuthorizeRouterData,
+        data: &PaymentsAuthorizeRouterData,
         event_builder: Option<&mut ConnectorEvent>,
         res: Response,
-    ) -> CustomResult<types::PaymentsAuthorizeRouterData, errors::ConnectorError> {
+    ) -> CustomResult<PaymentsAuthorizeRouterData, errors::ConnectorError> {
         let response: bambora::BamboraResponse = res
             .response
             .parse_struct("PaymentIntentResponse")
@@ -256,7 +253,7 @@ impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::P
         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,
@@ -272,18 +269,14 @@ impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::P
     }
 }
 
-impl
-    ConnectorIntegration<
-        api::CompleteAuthorize,
-        types::CompleteAuthorizeData,
-        types::PaymentsResponseData,
-    > for Bambora
+impl ConnectorIntegration<CompleteAuthorize, CompleteAuthorizeData, PaymentsResponseData>
+    for Bambora
 {
     fn get_headers(
         &self,
-        req: &types::PaymentsCompleteAuthorizeRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        req: &PaymentsCompleteAuthorizeRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
         self.build_headers(req, connectors)
     }
 
@@ -293,10 +286,11 @@ impl
 
     fn get_url(
         &self,
-        req: &types::PaymentsCompleteAuthorizeRouterData,
-        connectors: &settings::Connectors,
+        req: &PaymentsCompleteAuthorizeRouterData,
+        connectors: &Connectors,
     ) -> CustomResult<String, errors::ConnectorError> {
-        let meta: bambora::BamboraMeta = to_connector_meta(req.request.connector_meta.clone())?;
+        let meta: bambora::BamboraMeta =
+            utils::to_connector_meta(req.request.connector_meta.clone())?;
         Ok(format!(
             "{}/v1/payments/{}{}",
             self.base_url(connectors),
@@ -307,8 +301,8 @@ impl
 
     fn get_request_body(
         &self,
-        req: &types::PaymentsCompleteAuthorizeRouterData,
-        _connectors: &settings::Connectors,
+        req: &PaymentsCompleteAuthorizeRouterData,
+        _connectors: &Connectors,
     ) -> CustomResult<RequestContent, errors::ConnectorError> {
         let connector_req = bambora::BamboraThreedsContinueRequest::try_from(&req.request)?;
 
@@ -317,18 +311,19 @@ impl
 
     fn build_request(
         &self,
-        req: &types::PaymentsCompleteAuthorizeRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
-        let request = services::RequestBuilder::new()
-            .method(services::Method::Post)
-            .url(&types::PaymentsCompleteAuthorizeType::get_url(
+        req: &PaymentsCompleteAuthorizeRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
+        let request = RequestBuilder::new()
+            .method(Method::Post)
+            .url(&PaymentsCompleteAuthorizeType::get_url(
                 self, req, connectors,
             )?)
-            .headers(types::PaymentsCompleteAuthorizeType::get_headers(
+            .attach_default_headers()
+            .headers(PaymentsCompleteAuthorizeType::get_headers(
                 self, req, connectors,
             )?)
-            .set_body(types::PaymentsCompleteAuthorizeType::get_request_body(
+            .set_body(PaymentsCompleteAuthorizeType::get_request_body(
                 self, req, connectors,
             )?)
             .build();
@@ -337,10 +332,10 @@ impl
 
     fn handle_response(
         &self,
-        data: &types::PaymentsCompleteAuthorizeRouterData,
+        data: &PaymentsCompleteAuthorizeRouterData,
         event_builder: Option<&mut ConnectorEvent>,
         res: Response,
-    ) -> CustomResult<types::PaymentsCompleteAuthorizeRouterData, errors::ConnectorError> {
+    ) -> CustomResult<PaymentsCompleteAuthorizeRouterData, errors::ConnectorError> {
         let response: bambora::BamboraPaymentsResponse = res
             .response
             .parse_struct("BamboraPaymentsResponse")
@@ -348,7 +343,7 @@ impl
         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,
@@ -365,14 +360,12 @@ impl
     }
 }
 
-impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsResponseData>
-    for Bambora
-{
+impl ConnectorIntegration<PSync, PaymentsSyncData, PaymentsResponseData> for Bambora {
     fn get_headers(
         &self,
-        req: &types::PaymentsSyncRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        req: &PaymentsSyncRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
         self.build_headers(req, connectors)
     }
 
@@ -382,8 +375,8 @@ impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsRe
 
     fn get_url(
         &self,
-        req: &types::PaymentsSyncRouterData,
-        connectors: &settings::Connectors,
+        req: &PaymentsSyncRouterData,
+        connectors: &Connectors,
     ) -> CustomResult<String, errors::ConnectorError> {
         let connector_payment_id = req
             .request
@@ -398,15 +391,15 @@ impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsRe
 
     fn build_request(
         &self,
-        req: &types::PaymentsSyncRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        req: &PaymentsSyncRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
         Ok(Some(
-            services::RequestBuilder::new()
-                .method(services::Method::Get)
-                .url(&types::PaymentsSyncType::get_url(self, req, connectors)?)
+            RequestBuilder::new()
+                .method(Method::Get)
+                .url(&PaymentsSyncType::get_url(self, req, connectors)?)
                 .attach_default_headers()
-                .headers(types::PaymentsSyncType::get_headers(self, req, connectors)?)
+                .headers(PaymentsSyncType::get_headers(self, req, connectors)?)
                 .build(),
         ))
     }
@@ -421,10 +414,10 @@ impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsRe
 
     fn handle_response(
         &self,
-        data: &types::PaymentsSyncRouterData,
+        data: &PaymentsSyncRouterData,
         event_builder: Option<&mut ConnectorEvent>,
         res: Response,
-    ) -> CustomResult<types::PaymentsSyncRouterData, errors::ConnectorError> {
+    ) -> CustomResult<PaymentsSyncRouterData, errors::ConnectorError> {
         let response: bambora::BamboraPaymentsResponse = res
             .response
             .parse_struct("bambora PaymentsResponse")
@@ -433,7 +426,7 @@ impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsRe
         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,
@@ -442,14 +435,12 @@ impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsRe
     }
 }
 
-impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::PaymentsResponseData>
-    for Bambora
-{
+impl ConnectorIntegration<Capture, PaymentsCaptureData, PaymentsResponseData> for Bambora {
     fn get_headers(
         &self,
-        req: &types::PaymentsCaptureRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        req: &PaymentsCaptureRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
         self.build_headers(req, connectors)
     }
 
@@ -459,8 +450,8 @@ impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::Payme
 
     fn get_url(
         &self,
-        req: &types::PaymentsCaptureRouterData,
-        connectors: &settings::Connectors,
+        req: &PaymentsCaptureRouterData,
+        connectors: &Connectors,
     ) -> CustomResult<String, errors::ConnectorError> {
         Ok(format!(
             "{}/v1/payments/{}/completions",
@@ -471,8 +462,8 @@ impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::Payme
 
     fn get_request_body(
         &self,
-        req: &types::PaymentsCaptureRouterData,
-        _connectors: &settings::Connectors,
+        req: &PaymentsCaptureRouterData,
+        _connectors: &Connectors,
     ) -> CustomResult<RequestContent, errors::ConnectorError> {
         let connector_router_data = bambora::BamboraRouterData::try_from((
             &self.get_currency_unit(),
@@ -488,17 +479,15 @@ impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::Payme
 
     fn build_request(
         &self,
-        req: &types::PaymentsCaptureRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        req: &PaymentsCaptureRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
         Ok(Some(
-            services::RequestBuilder::new()
-                .method(services::Method::Post)
-                .url(&types::PaymentsCaptureType::get_url(self, req, connectors)?)
+            RequestBuilder::new()
+                .method(Method::Post)
+                .url(&PaymentsCaptureType::get_url(self, req, connectors)?)
                 .attach_default_headers()
-                .headers(types::PaymentsCaptureType::get_headers(
-                    self, req, connectors,
-                )?)
+                .headers(PaymentsCaptureType::get_headers(self, req, connectors)?)
                 .set_body(self.get_request_body(req, connectors)?)
                 .build(),
         ))
@@ -506,10 +495,10 @@ impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::Payme
 
     fn handle_response(
         &self,
-        data: &types::PaymentsCaptureRouterData,
+        data: &PaymentsCaptureRouterData,
         event_builder: Option<&mut ConnectorEvent>,
         res: Response,
-    ) -> CustomResult<types::PaymentsCaptureRouterData, errors::ConnectorError> {
+    ) -> CustomResult<PaymentsCaptureRouterData, errors::ConnectorError> {
         let response: bambora::BamboraPaymentsResponse = res
             .response
             .parse_struct("Bambora PaymentsResponse")
@@ -518,7 +507,7 @@ impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::Payme
         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,
@@ -535,14 +524,12 @@ impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::Payme
     }
 }
 
-impl ConnectorIntegration<api::Void, types::PaymentsCancelData, types::PaymentsResponseData>
-    for Bambora
-{
+impl ConnectorIntegration<Void, PaymentsCancelData, PaymentsResponseData> for Bambora {
     fn get_headers(
         &self,
-        req: &types::PaymentsCancelRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        req: &PaymentsCancelRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
         self.build_headers(req, connectors)
     }
 
@@ -552,8 +539,8 @@ impl ConnectorIntegration<api::Void, types::PaymentsCancelData, types::PaymentsR
 
     fn get_url(
         &self,
-        req: &types::PaymentsCancelRouterData,
-        connectors: &settings::Connectors,
+        req: &PaymentsCancelRouterData,
+        connectors: &Connectors,
     ) -> CustomResult<String, errors::ConnectorError> {
         let connector_payment_id = req.request.connector_transaction_id.clone();
         Ok(format!(
@@ -565,8 +552,8 @@ impl ConnectorIntegration<api::Void, types::PaymentsCancelData, types::PaymentsR
 
     fn get_request_body(
         &self,
-        req: &types::PaymentsCancelRouterData,
-        _connectors: &settings::Connectors,
+        req: &PaymentsCancelRouterData,
+        _connectors: &Connectors,
     ) -> CustomResult<RequestContent, errors::ConnectorError> {
         let connector_router_data = bambora::BamboraRouterData::try_from((
             &self.get_currency_unit(),
@@ -590,15 +577,15 @@ impl ConnectorIntegration<api::Void, types::PaymentsCancelData, types::PaymentsR
 
     fn build_request(
         &self,
-        req: &types::PaymentsCancelRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        req: &PaymentsCancelRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
         Ok(Some(
-            services::RequestBuilder::new()
-                .method(services::Method::Post)
-                .url(&types::PaymentsVoidType::get_url(self, req, connectors)?)
+            RequestBuilder::new()
+                .method(Method::Post)
+                .url(&PaymentsVoidType::get_url(self, req, connectors)?)
                 .attach_default_headers()
-                .headers(types::PaymentsVoidType::get_headers(self, req, connectors)?)
+                .headers(PaymentsVoidType::get_headers(self, req, connectors)?)
                 .set_body(self.get_request_body(req, connectors)?)
                 .build(),
         ))
@@ -606,10 +593,10 @@ impl ConnectorIntegration<api::Void, types::PaymentsCancelData, types::PaymentsR
 
     fn handle_response(
         &self,
-        data: &types::PaymentsCancelRouterData,
+        data: &PaymentsCancelRouterData,
         event_builder: Option<&mut ConnectorEvent>,
         res: Response,
-    ) -> CustomResult<types::PaymentsCancelRouterData, errors::ConnectorError> {
+    ) -> CustomResult<PaymentsCancelRouterData, errors::ConnectorError> {
         let response: bambora::BamboraPaymentsResponse = res
             .response
             .parse_struct("bambora PaymentsResponse")
@@ -618,7 +605,7 @@ impl ConnectorIntegration<api::Void, types::PaymentsCancelData, types::PaymentsR
         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,
@@ -635,31 +622,29 @@ impl ConnectorIntegration<api::Void, types::PaymentsCancelData, types::PaymentsR
     }
 }
 
-impl services::ConnectorRedirectResponse for Bambora {
+impl ConnectorRedirectResponse for Bambora {
     fn get_flow_type(
         &self,
         _query_params: &str,
         _json_payload: Option<serde_json::Value>,
-        action: services::PaymentAction,
-    ) -> CustomResult<payments::CallConnectorAction, errors::ConnectorError> {
+        action: enums::PaymentAction,
+    ) -> CustomResult<enums::CallConnectorAction, errors::ConnectorError> {
         match action {
-            services::PaymentAction::PSync
-            | services::PaymentAction::CompleteAuthorize
-            | services::PaymentAction::PaymentAuthenticateCompleteAuthorize => {
-                Ok(payments::CallConnectorAction::Trigger)
+            enums::PaymentAction::PSync
+            | enums::PaymentAction::CompleteAuthorize
+            | enums::PaymentAction::PaymentAuthenticateCompleteAuthorize => {
+                Ok(enums::CallConnectorAction::Trigger)
             }
         }
     }
 }
 
-impl ConnectorIntegration<api::Execute, types::RefundsData, types::RefundsResponseData>
-    for Bambora
-{
+impl ConnectorIntegration<Execute, RefundsData, RefundsResponseData> for Bambora {
     fn get_headers(
         &self,
-        req: &types::RefundsRouterData<api::Execute>,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        req: &RefundsRouterData<Execute>,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
         self.build_headers(req, connectors)
     }
 
@@ -669,8 +654,8 @@ impl ConnectorIntegration<api::Execute, types::RefundsData, types::RefundsRespon
 
     fn get_url(
         &self,
-        req: &types::RefundsRouterData<api::Execute>,
-        connectors: &settings::Connectors,
+        req: &RefundsRouterData<Execute>,
+        connectors: &Connectors,
     ) -> CustomResult<String, errors::ConnectorError> {
         let connector_payment_id = req.request.connector_transaction_id.clone();
         Ok(format!(
@@ -682,8 +667,8 @@ impl ConnectorIntegration<api::Execute, types::RefundsData, types::RefundsRespon
 
     fn get_request_body(
         &self,
-        req: &types::RefundsRouterData<api::Execute>,
-        _connectors: &settings::Connectors,
+        req: &RefundsRouterData<Execute>,
+        _connectors: &Connectors,
     ) -> CustomResult<RequestContent, errors::ConnectorError> {
         let connector_router_data = bambora::BamboraRouterData::try_from((
             &self.get_currency_unit(),
@@ -697,11 +682,11 @@ impl ConnectorIntegration<api::Execute, types::RefundsData, types::RefundsRespon
 
     fn build_request(
         &self,
-        req: &types::RefundsRouterData<api::Execute>,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
-        let request = services::RequestBuilder::new()
-            .method(services::Method::Post)
+        req: &RefundsRouterData<Execute>,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
+        let request = RequestBuilder::new()
+            .method(Method::Post)
             .url(&types::RefundExecuteType::get_url(self, req, connectors)?)
             .attach_default_headers()
             .headers(types::RefundExecuteType::get_headers(
@@ -716,10 +701,10 @@ impl ConnectorIntegration<api::Execute, types::RefundsData, types::RefundsRespon
 
     fn handle_response(
         &self,
-        data: &types::RefundsRouterData<api::Execute>,
+        data: &RefundsRouterData<Execute>,
         event_builder: Option<&mut ConnectorEvent>,
         res: Response,
-    ) -> CustomResult<types::RefundsRouterData<api::Execute>, errors::ConnectorError> {
+    ) -> CustomResult<RefundsRouterData<Execute>, errors::ConnectorError> {
         let response: bambora::RefundResponse = res
             .response
             .parse_struct("bambora RefundResponse")
@@ -728,7 +713,7 @@ impl ConnectorIntegration<api::Execute, types::RefundsData, types::RefundsRespon
         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,
@@ -745,12 +730,12 @@ impl ConnectorIntegration<api::Execute, types::RefundsData, types::RefundsRespon
     }
 }
 
-impl ConnectorIntegration<api::RSync, types::RefundsData, types::RefundsResponseData> for Bambora {
+impl ConnectorIntegration<RSync, RefundsData, RefundsResponseData> for Bambora {
     fn get_headers(
         &self,
-        req: &types::RefundSyncRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        req: &RefundSyncRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
         self.build_headers(req, connectors)
     }
 
@@ -760,8 +745,8 @@ impl ConnectorIntegration<api::RSync, types::RefundsData, types::RefundsResponse
 
     fn get_url(
         &self,
-        req: &types::RefundSyncRouterData,
-        connectors: &settings::Connectors,
+        req: &RefundSyncRouterData,
+        connectors: &Connectors,
     ) -> CustomResult<String, errors::ConnectorError> {
         let _connector_payment_id = req.request.connector_transaction_id.clone();
         let connector_refund_id = req.request.get_connector_refund_id()?;
@@ -774,12 +759,12 @@ impl ConnectorIntegration<api::RSync, types::RefundsData, types::RefundsResponse
 
     fn build_request(
         &self,
-        req: &types::RefundSyncRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        req: &RefundSyncRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
         Ok(Some(
-            services::RequestBuilder::new()
-                .method(services::Method::Get)
+            RequestBuilder::new()
+                .method(Method::Get)
                 .url(&types::RefundSyncType::get_url(self, req, connectors)?)
                 .attach_default_headers()
                 .headers(types::RefundSyncType::get_headers(self, req, connectors)?)
@@ -789,10 +774,10 @@ impl ConnectorIntegration<api::RSync, types::RefundsData, types::RefundsResponse
 
     fn handle_response(
         &self,
-        data: &types::RefundSyncRouterData,
+        data: &RefundSyncRouterData,
         event_builder: Option<&mut ConnectorEvent>,
         res: Response,
-    ) -> CustomResult<types::RefundSyncRouterData, errors::ConnectorError> {
+    ) -> CustomResult<RefundSyncRouterData, errors::ConnectorError> {
         let response: bambora::RefundResponse = res
             .response
             .parse_struct("bambora RefundResponse")
@@ -801,7 +786,7 @@ impl ConnectorIntegration<api::RSync, types::RefundsData, types::RefundsResponse
         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,
@@ -819,24 +804,24 @@ impl ConnectorIntegration<api::RSync, types::RefundsData, types::RefundsResponse
 }
 
 #[async_trait::async_trait]
-impl api::IncomingWebhook for Bambora {
+impl webhooks::IncomingWebhook for Bambora {
     fn get_webhook_object_reference_id(
         &self,
-        _request: &api::IncomingWebhookRequestDetails<'_>,
+        _request: &webhooks::IncomingWebhookRequestDetails<'_>,
     ) -> CustomResult<api_models::webhooks::ObjectReferenceId, errors::ConnectorError> {
         Err(report!(errors::ConnectorError::WebhooksNotImplemented))
     }
 
     fn get_webhook_event_type(
         &self,
-        _request: &api::IncomingWebhookRequestDetails<'_>,
-    ) -> CustomResult<api::IncomingWebhookEvent, errors::ConnectorError> {
-        Ok(api::IncomingWebhookEvent::EventNotSupported)
+        _request: &webhooks::IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<api_models::webhooks::IncomingWebhookEvent, errors::ConnectorError> {
+        Ok(api_models::webhooks::IncomingWebhookEvent::EventNotSupported)
     }
 
     fn get_webhook_resource_object(
         &self,
-        _request: &api::IncomingWebhookRequestDetails<'_>,
+        _request: &webhooks::IncomingWebhookRequestDetails<'_>,
     ) -> CustomResult<Box<dyn masking::ErasedMaskSerialize>, errors::ConnectorError> {
         Err(report!(errors::ConnectorError::WebhooksNotImplemented))
     }
diff --git a/crates/router/src/connector/bambora/transformers.rs b/crates/hyperswitch_connectors/src/connectors/bambora/transformers.rs
similarity index 79%
rename from crates/router/src/connector/bambora/transformers.rs
rename to crates/hyperswitch_connectors/src/connectors/bambora/transformers.rs
index b2e9b1a032e..bfa2da851f8 100644
--- a/crates/router/src/connector/bambora/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/bambora/transformers.rs
@@ -1,19 +1,29 @@
 use base64::Engine;
+use common_enums::enums;
 use common_utils::{ext_traits::ValueExt, pii::IpAddress};
 use error_stack::ResultExt;
+use hyperswitch_domain_models::{
+    payment_method_data::PaymentMethodData,
+    router_data::{ConnectorAuthType, RouterData},
+    router_flow_types::refunds::{Execute, RSync},
+    router_request_types::{
+        CompleteAuthorizeData, PaymentsAuthorizeData, PaymentsCancelData, PaymentsCaptureData,
+        PaymentsSyncData, ResponseId,
+    },
+    router_response_types::{PaymentsResponseData, RedirectForm, RefundsResponseData},
+    types,
+};
+use hyperswitch_interfaces::{api, errors};
 use masking::{ExposeInterface, PeekInterface, Secret};
 use serde::{Deserialize, Deserializer, Serialize};
 
 use crate::{
-    connector::utils::{
-        self, AddressDetailsData, BrowserInformationData, CardData as OtherCardData,
+    types::{RefundsResponseRouterData, ResponseRouterData},
+    utils::{
+        self, AddressDetailsData, BrowserInformationData, CardData as _,
         PaymentsAuthorizeRequestData, PaymentsCompleteAuthorizeRequestData,
-        PaymentsSyncRequestData, RouterData,
+        PaymentsSyncRequestData, RouterData as _,
     },
-    consts,
-    core::errors,
-    services,
-    types::{self, api, domain, storage::enums},
 };
 
 pub struct BamboraRouterData<T> {
@@ -109,9 +119,9 @@ fn get_browser_info(
     }
 }
 
-impl TryFrom<&types::CompleteAuthorizeData> for BamboraThreedsContinueRequest {
+impl TryFrom<&CompleteAuthorizeData> for BamboraThreedsContinueRequest {
     type Error = error_stack::Report<errors::ConnectorError>;
-    fn try_from(value: &types::CompleteAuthorizeData) -> Result<Self, Self::Error> {
+    fn try_from(value: &CompleteAuthorizeData) -> Result<Self, Self::Error> {
         let card_response: CardResponse = value
             .redirect_response
             .as_ref()
@@ -135,7 +145,7 @@ impl TryFrom<BamboraRouterData<&types::PaymentsAuthorizeRouterData>> for Bambora
         item: BamboraRouterData<&types::PaymentsAuthorizeRouterData>,
     ) -> Result<Self, Self::Error> {
         match item.router_data.request.payment_method_data.clone() {
-            domain::PaymentMethodData::Card(req_card) => {
+            PaymentMethodData::Card(req_card) => {
                 let (three_ds, customer_ip) = match item.router_data.auth_type {
                     enums::AuthenticationType::ThreeDs => (
                         Some(ThreeDSecure {
@@ -172,26 +182,24 @@ impl TryFrom<BamboraRouterData<&types::PaymentsAuthorizeRouterData>> for Bambora
                     term_url: item.router_data.request.complete_authorize_url.clone(),
                 })
             }
-            domain::PaymentMethodData::CardRedirect(_)
-            | domain::PaymentMethodData::Wallet(_)
-            | domain::PaymentMethodData::PayLater(_)
-            | domain::PaymentMethodData::BankRedirect(_)
-            | domain::PaymentMethodData::BankDebit(_)
-            | domain::PaymentMethodData::BankTransfer(_)
-            | domain::PaymentMethodData::Crypto(_)
-            | domain::PaymentMethodData::MandatePayment
-            | domain::PaymentMethodData::Reward
-            | domain::PaymentMethodData::RealTimePayment(_)
-            | domain::PaymentMethodData::Upi(_)
-            | domain::PaymentMethodData::Voucher(_)
-            | domain::PaymentMethodData::GiftCard(_)
-            | domain::PaymentMethodData::OpenBanking(_)
-            | domain::PaymentMethodData::CardToken(_) => {
-                Err(errors::ConnectorError::NotImplemented(
-                    utils::get_unimplemented_payment_method_error_message("bambora"),
-                )
-                .into())
-            }
+            PaymentMethodData::CardRedirect(_)
+            | PaymentMethodData::Wallet(_)
+            | PaymentMethodData::PayLater(_)
+            | PaymentMethodData::BankRedirect(_)
+            | PaymentMethodData::BankDebit(_)
+            | PaymentMethodData::BankTransfer(_)
+            | PaymentMethodData::Crypto(_)
+            | PaymentMethodData::MandatePayment
+            | PaymentMethodData::Reward
+            | PaymentMethodData::RealTimePayment(_)
+            | PaymentMethodData::Upi(_)
+            | PaymentMethodData::Voucher(_)
+            | PaymentMethodData::GiftCard(_)
+            | PaymentMethodData::OpenBanking(_)
+            | PaymentMethodData::CardToken(_) => Err(errors::ConnectorError::NotImplemented(
+                utils::get_unimplemented_payment_method_error_message("bambora"),
+            )
+            .into()),
         }
     }
 }
@@ -211,12 +219,15 @@ pub struct BamboraAuthType {
     pub(super) api_key: Secret<String>,
 }
 
-impl TryFrom<&types::ConnectorAuthType> for BamboraAuthType {
+impl TryFrom<&ConnectorAuthType> for BamboraAuthType {
     type Error = error_stack::Report<errors::ConnectorError>;
-    fn try_from(auth_type: &types::ConnectorAuthType) -> Result<Self, Self::Error> {
-        if let types::ConnectorAuthType::BodyKey { api_key, key1 } = auth_type {
+    fn try_from(auth_type: &ConnectorAuthType) -> Result<Self, Self::Error> {
+        if let ConnectorAuthType::BodyKey { api_key, key1 } = auth_type {
             let auth_key = format!("{}:{}", key1.peek(), api_key.peek());
-            let auth_header = format!("Passcode {}", consts::BASE64_ENGINE.encode(auth_key));
+            let auth_header = format!(
+                "Passcode {}",
+                common_utils::consts::BASE64_ENGINE.encode(auth_key)
+            );
             Ok(Self {
                 api_key: Secret::new(auth_header),
             })
@@ -407,24 +418,12 @@ impl TryFrom<BamboraRouterData<&types::PaymentsCaptureRouterData>>
     }
 }
 
-impl<F>
-    TryFrom<
-        types::ResponseRouterData<
-            F,
-            BamboraResponse,
-            types::PaymentsAuthorizeData,
-            types::PaymentsResponseData,
-        >,
-    > for types::RouterData<F, types::PaymentsAuthorizeData, types::PaymentsResponseData>
+impl<F> TryFrom<ResponseRouterData<F, BamboraResponse, PaymentsAuthorizeData, PaymentsResponseData>>
+    for RouterData<F, PaymentsAuthorizeData, PaymentsResponseData>
 {
     type Error = error_stack::Report<errors::ConnectorError>;
     fn try_from(
-        item: types::ResponseRouterData<
-            F,
-            BamboraResponse,
-            types::PaymentsAuthorizeData,
-            types::PaymentsResponseData,
-        >,
+        item: ResponseRouterData<F, BamboraResponse, PaymentsAuthorizeData, PaymentsResponseData>,
     ) -> Result<Self, Self::Error> {
         match item.response {
             BamboraResponse::NormalTransaction(pg_response) => Ok(Self {
@@ -439,10 +438,8 @@ impl<F>
                         false => enums::AttemptStatus::AuthorizationFailed,
                     }
                 },
-                response: Ok(types::PaymentsResponseData::TransactionResponse {
-                    resource_id: types::ResponseId::ConnectorTransactionId(
-                        pg_response.id.to_string(),
-                    ),
+                response: Ok(PaymentsResponseData::TransactionResponse {
+                    resource_id: ResponseId::ConnectorTransactionId(pg_response.id.to_string()),
                     redirection_data: None,
                     mandate_reference: None,
                     connector_metadata: None,
@@ -458,11 +455,11 @@ impl<F>
                 let value = url::form_urlencoded::parse(response.contents.as_bytes())
                     .map(|(key, val)| [key, val].concat())
                     .collect();
-                let redirection_data = Some(services::RedirectForm::Html { html_data: value });
+                let redirection_data = Some(RedirectForm::Html { html_data: value });
                 Ok(Self {
                     status: enums::AttemptStatus::AuthenticationPending,
-                    response: Ok(types::PaymentsResponseData::TransactionResponse {
-                        resource_id: types::ResponseId::NoResponseId,
+                    response: Ok(PaymentsResponseData::TransactionResponse {
+                        resource_id: ResponseId::NoResponseId,
                         redirection_data,
                         mandate_reference: None,
                         connector_metadata: Some(
@@ -487,21 +484,16 @@ impl<F>
 
 impl<F>
     TryFrom<
-        types::ResponseRouterData<
-            F,
-            BamboraPaymentsResponse,
-            types::CompleteAuthorizeData,
-            types::PaymentsResponseData,
-        >,
-    > for types::RouterData<F, types::CompleteAuthorizeData, types::PaymentsResponseData>
+        ResponseRouterData<F, BamboraPaymentsResponse, CompleteAuthorizeData, PaymentsResponseData>,
+    > for RouterData<F, CompleteAuthorizeData, PaymentsResponseData>
 {
     type Error = error_stack::Report<errors::ConnectorError>;
     fn try_from(
-        item: types::ResponseRouterData<
+        item: ResponseRouterData<
             F,
             BamboraPaymentsResponse,
-            types::CompleteAuthorizeData,
-            types::PaymentsResponseData,
+            CompleteAuthorizeData,
+            PaymentsResponseData,
         >,
     ) -> Result<Self, Self::Error> {
         Ok(Self {
@@ -516,10 +508,8 @@ impl<F>
                     false => enums::AttemptStatus::AuthorizationFailed,
                 }
             },
-            response: Ok(types::PaymentsResponseData::TransactionResponse {
-                resource_id: types::ResponseId::ConnectorTransactionId(
-                    item.response.id.to_string(),
-                ),
+            response: Ok(PaymentsResponseData::TransactionResponse {
+                resource_id: ResponseId::ConnectorTransactionId(item.response.id.to_string()),
                 redirection_data: None,
                 mandate_reference: None,
                 connector_metadata: None,
@@ -534,22 +524,16 @@ impl<F>
 }
 
 impl<F>
-    TryFrom<
-        types::ResponseRouterData<
-            F,
-            BamboraPaymentsResponse,
-            types::PaymentsSyncData,
-            types::PaymentsResponseData,
-        >,
-    > for types::RouterData<F, types::PaymentsSyncData, types::PaymentsResponseData>
+    TryFrom<ResponseRouterData<F, BamboraPaymentsResponse, PaymentsSyncData, PaymentsResponseData>>
+    for RouterData<F, PaymentsSyncData, PaymentsResponseData>
 {
     type Error = error_stack::Report<errors::ConnectorError>;
     fn try_from(
-        item: types::ResponseRouterData<
+        item: ResponseRouterData<
             F,
             BamboraPaymentsResponse,
-            types::PaymentsSyncData,
-            types::PaymentsResponseData,
+            PaymentsSyncData,
+            PaymentsResponseData,
         >,
     ) -> Result<Self, Self::Error> {
         Ok(Self {
@@ -569,10 +553,8 @@ impl<F>
                     }
                 }
             },
-            response: Ok(types::PaymentsResponseData::TransactionResponse {
-                resource_id: types::ResponseId::ConnectorTransactionId(
-                    item.response.id.to_string(),
-                ),
+            response: Ok(PaymentsResponseData::TransactionResponse {
+                resource_id: ResponseId::ConnectorTransactionId(item.response.id.to_string()),
                 redirection_data: None,
                 mandate_reference: None,
                 connector_metadata: None,
@@ -588,21 +570,16 @@ impl<F>
 
 impl<F>
     TryFrom<
-        types::ResponseRouterData<
-            F,
-            BamboraPaymentsResponse,
-            types::PaymentsCaptureData,
-            types::PaymentsResponseData,
-        >,
-    > for types::RouterData<F, types::PaymentsCaptureData, types::PaymentsResponseData>
+        ResponseRouterData<F, BamboraPaymentsResponse, PaymentsCaptureData, PaymentsResponseData>,
+    > for RouterData<F, PaymentsCaptureData, PaymentsResponseData>
 {
     type Error = error_stack::Report<errors::ConnectorError>;
     fn try_from(
-        item: types::ResponseRouterData<
+        item: ResponseRouterData<
             F,
             BamboraPaymentsResponse,
-            types::PaymentsCaptureData,
-            types::PaymentsResponseData,
+            PaymentsCaptureData,
+            PaymentsResponseData,
         >,
     ) -> Result<Self, Self::Error> {
         Ok(Self {
@@ -611,10 +588,8 @@ impl<F>
             } else {
                 enums::AttemptStatus::Failure
             },
-            response: Ok(types::PaymentsResponseData::TransactionResponse {
-                resource_id: types::ResponseId::ConnectorTransactionId(
-                    item.response.id.to_string(),
-                ),
+            response: Ok(PaymentsResponseData::TransactionResponse {
+                resource_id: ResponseId::ConnectorTransactionId(item.response.id.to_string()),
                 redirection_data: None,
                 mandate_reference: None,
                 connector_metadata: None,
@@ -630,21 +605,16 @@ impl<F>
 
 impl<F>
     TryFrom<
-        types::ResponseRouterData<
-            F,
-            BamboraPaymentsResponse,
-            types::PaymentsCancelData,
-            types::PaymentsResponseData,
-        >,
-    > for types::RouterData<F, types::PaymentsCancelData, types::PaymentsResponseData>
+        ResponseRouterData<F, BamboraPaymentsResponse, PaymentsCancelData, PaymentsResponseData>,
+    > for RouterData<F, PaymentsCancelData, PaymentsResponseData>
 {
     type Error = error_stack::Report<errors::ConnectorError>;
     fn try_from(
-        item: types::ResponseRouterData<
+        item: ResponseRouterData<
             F,
             BamboraPaymentsResponse,
-            types::PaymentsCancelData,
-            types::PaymentsResponseData,
+            PaymentsCancelData,
+            PaymentsResponseData,
         >,
     ) -> Result<Self, Self::Error> {
         Ok(Self {
@@ -653,10 +623,8 @@ impl<F>
             } else {
                 enums::AttemptStatus::VoidFailed
             },
-            response: Ok(types::PaymentsResponseData::TransactionResponse {
-                resource_id: types::ResponseId::ConnectorTransactionId(
-                    item.response.id.to_string(),
-                ),
+            response: Ok(PaymentsResponseData::TransactionResponse {
+                resource_id: ResponseId::ConnectorTransactionId(item.response.id.to_string()),
                 redirection_data: None,
                 mandate_reference: None,
                 connector_metadata: None,
@@ -738,12 +706,12 @@ pub struct RefundResponse {
     pub risk_score: Option<f32>,
 }
 
-impl TryFrom<types::RefundsResponseRouterData<api::Execute, RefundResponse>>
-    for types::RefundsRouterData<api::Execute>
+impl TryFrom<RefundsResponseRouterData<Execute, RefundResponse>>
+    for types::RefundsRouterData<Execute>
 {
     type Error = error_stack::Report<errors::ConnectorError>;
     fn try_from(
-        item: types::RefundsResponseRouterData<api::Execute, RefundResponse>,
+        item: RefundsResponseRouterData<Execute, RefundResponse>,
     ) -> Result<Self, Self::Error> {
         let refund_status = if item.response.approved.as_str() == "1" {
             enums::RefundStatus::Success
@@ -751,7 +719,7 @@ impl TryFrom<types::RefundsResponseRouterData<api::Execute, RefundResponse>>
             enums::RefundStatus::Failure
         };
         Ok(Self {
-            response: Ok(types::RefundsResponseData {
+            response: Ok(RefundsResponseData {
                 connector_refund_id: item.response.id.to_string(),
                 refund_status,
             }),
@@ -760,12 +728,10 @@ impl TryFrom<types::RefundsResponseRouterData<api::Execute, RefundResponse>>
     }
 }
 
-impl TryFrom<types::RefundsResponseRouterData<api::RSync, RefundResponse>>
-    for types::RefundsRouterData<api::RSync>
-{
+impl TryFrom<RefundsResponseRouterData<RSync, RefundResponse>> for types::RefundsRouterData<RSync> {
     type Error = error_stack::Report<errors::ConnectorError>;
     fn try_from(
-        item: types::RefundsResponseRouterData<api::RSync, RefundResponse>,
+        item: RefundsResponseRouterData<RSync, RefundResponse>,
     ) -> Result<Self, Self::Error> {
         let refund_status = if item.response.approved.as_str() == "1" {
             enums::RefundStatus::Success
@@ -773,7 +739,7 @@ impl TryFrom<types::RefundsResponseRouterData<api::RSync, RefundResponse>>
             enums::RefundStatus::Failure
         };
         Ok(Self {
-            response: Ok(types::RefundsResponseData {
+            response: Ok(RefundsResponseData {
                 connector_refund_id: item.response.id.to_string(),
                 refund_status,
             }),
diff --git a/crates/router/src/connector/bitpay.rs b/crates/hyperswitch_connectors/src/connectors/bitpay.rs
similarity index 61%
rename from crates/router/src/connector/bitpay.rs
rename to crates/hyperswitch_connectors/src/connectors/bitpay.rs
index 445324dee3f..032b8cf051f 100644
--- a/crates/router/src/connector/bitpay.rs
+++ b/crates/hyperswitch_connectors/src/connectors/bitpay.rs
@@ -1,35 +1,44 @@
 pub mod transformers;
 
+use api_models::webhooks::IncomingWebhookEvent;
 use common_utils::{
-    errors::ReportSwitchExt,
+    errors::{CustomResult, ReportSwitchExt},
     ext_traits::ByteSliceExt,
-    request::RequestContent,
+    request::{Method, Request, RequestBuilder, RequestContent},
     types::{AmountConvertor, MinorUnit, MinorUnitForConnector},
 };
 use error_stack::ResultExt;
-use masking::PeekInterface;
-use transformers as bitpay;
-
-use self::bitpay::BitpayWebhookDetails;
-use super::utils as connector_utils;
-use crate::{
-    configs::settings,
-    consts,
-    core::errors::{self, CustomResult},
-    events::connector_api_logs::ConnectorEvent,
-    headers,
-    services::{
-        self,
-        request::{self, Mask},
-        ConnectorIntegration, ConnectorValidation,
+use hyperswitch_domain_models::{
+    router_data::{AccessToken, ConnectorAuthType, ErrorResponse, RouterData},
+    router_flow_types::{
+        access_token_auth::AccessTokenAuth,
+        payments::{Authorize, Capture, PSync, PaymentMethodToken, Session, SetupMandate, Void},
+        refunds::{Execute, RSync},
     },
+    router_request_types::{
+        AccessTokenRequestData, PaymentMethodTokenizationData, PaymentsAuthorizeData,
+        PaymentsCancelData, PaymentsCaptureData, PaymentsSessionData, PaymentsSyncData,
+        RefundsData, SetupMandateRequestData,
+    },
+    router_response_types::{PaymentsResponseData, RefundsResponseData},
     types::{
-        self,
-        api::{self, ConnectorCommon, ConnectorCommonExt},
-        ErrorResponse, Response,
+        PaymentsAuthorizeRouterData, PaymentsCaptureRouterData, PaymentsSyncRouterData,
+        RefundsRouterData,
     },
-    utils::BytesExt,
 };
+use hyperswitch_interfaces::{
+    api::{self, ConnectorCommon, ConnectorCommonExt, ConnectorIntegration, ConnectorValidation},
+    configs::Connectors,
+    consts, errors,
+    events::connector_api_logs::ConnectorEvent,
+    types::{PaymentsAuthorizeType, PaymentsSyncType, Response},
+    webhooks,
+};
+use masking::{Mask, PeekInterface};
+use transformers as bitpay;
+
+use self::bitpay::BitpayWebhookDetails;
+use crate::{constants::headers, types::ResponseRouterData, utils};
 
 #[derive(Clone)]
 pub struct Bitpay {
@@ -57,12 +66,8 @@ impl api::Refund for Bitpay {}
 impl api::RefundExecute for Bitpay {}
 impl api::RefundSync for Bitpay {}
 
-impl
-    ConnectorIntegration<
-        api::PaymentMethodToken,
-        types::PaymentMethodTokenizationData,
-        types::PaymentsResponseData,
-    > for Bitpay
+impl ConnectorIntegration<PaymentMethodToken, PaymentMethodTokenizationData, PaymentsResponseData>
+    for Bitpay
 {
     // Not Implemented (R)
 }
@@ -73,13 +78,13 @@ where
 {
     fn build_headers(
         &self,
-        _req: &types::RouterData<Flow, Request, Response>,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        _req: &RouterData<Flow, Request, Response>,
+        _connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
         let header = vec![
             (
                 headers::CONTENT_TYPE.to_string(),
-                types::PaymentsAuthorizeType::get_content_type(self)
+                PaymentsAuthorizeType::get_content_type(self)
                     .to_string()
                     .into(),
             ),
@@ -105,14 +110,14 @@ impl ConnectorCommon for Bitpay {
         "application/json"
     }
 
-    fn base_url<'a>(&self, connectors: &'a settings::Connectors) -> &'a str {
+    fn base_url<'a>(&self, connectors: &'a Connectors) -> &'a str {
         connectors.bitpay.base_url.as_ref()
     }
 
     fn get_auth_header(
         &self,
-        auth_type: &types::ConnectorAuthType,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        auth_type: &ConnectorAuthType,
+    ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
         let auth = bitpay::BitpayAuthType::try_from(auth_type)
             .change_context(errors::ConnectorError::FailedToObtainAuthType)?;
         Ok(vec![(
@@ -147,33 +152,18 @@ impl ConnectorCommon for Bitpay {
 
 impl ConnectorValidation for Bitpay {}
 
-impl ConnectorIntegration<api::Session, types::PaymentsSessionData, types::PaymentsResponseData>
-    for Bitpay
-{
+impl ConnectorIntegration<Session, PaymentsSessionData, PaymentsResponseData> for Bitpay {
     //TODO: implement sessions flow
 }
 
-impl ConnectorIntegration<api::AccessTokenAuth, types::AccessTokenRequestData, types::AccessToken>
-    for Bitpay
-{
-}
+impl ConnectorIntegration<AccessTokenAuth, AccessTokenRequestData, AccessToken> for Bitpay {}
 
-impl
-    ConnectorIntegration<
-        api::SetupMandate,
-        types::SetupMandateRequestData,
-        types::PaymentsResponseData,
-    > for Bitpay
-{
+impl ConnectorIntegration<SetupMandate, SetupMandateRequestData, PaymentsResponseData> for Bitpay {
     fn build_request(
         &self,
-        _req: &types::RouterData<
-            api::SetupMandate,
-            types::SetupMandateRequestData,
-            types::PaymentsResponseData,
-        >,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        _req: &RouterData<SetupMandate, SetupMandateRequestData, PaymentsResponseData>,
+        _connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
         Err(
             errors::ConnectorError::NotImplemented("Setup Mandate flow for Bitpay".to_string())
                 .into(),
@@ -181,14 +171,12 @@ impl
     }
 }
 
-impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::PaymentsResponseData>
-    for Bitpay
-{
+impl ConnectorIntegration<Authorize, PaymentsAuthorizeData, PaymentsResponseData> for Bitpay {
     fn get_headers(
         &self,
-        req: &types::PaymentsAuthorizeRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        req: &PaymentsAuthorizeRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
         self.build_headers(req, connectors)
     }
 
@@ -198,18 +186,18 @@ impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::P
 
     fn get_url(
         &self,
-        _req: &types::PaymentsAuthorizeRouterData,
-        connectors: &settings::Connectors,
+        _req: &PaymentsAuthorizeRouterData,
+        connectors: &Connectors,
     ) -> CustomResult<String, errors::ConnectorError> {
         Ok(format!("{}/invoices", self.base_url(connectors)))
     }
 
     fn get_request_body(
         &self,
-        req: &types::PaymentsAuthorizeRouterData,
-        _connectors: &settings::Connectors,
+        req: &PaymentsAuthorizeRouterData,
+        _connectors: &Connectors,
     ) -> CustomResult<RequestContent, errors::ConnectorError> {
-        let amount = connector_utils::convert_amount(
+        let amount = utils::convert_amount(
             self.amount_converter,
             req.request.minor_amount,
             req.request.currency,
@@ -223,20 +211,16 @@ impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::P
 
     fn build_request(
         &self,
-        req: &types::PaymentsAuthorizeRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        req: &PaymentsAuthorizeRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
         Ok(Some(
-            services::RequestBuilder::new()
-                .method(services::Method::Post)
-                .url(&types::PaymentsAuthorizeType::get_url(
-                    self, req, connectors,
-                )?)
+            RequestBuilder::new()
+                .method(Method::Post)
+                .url(&PaymentsAuthorizeType::get_url(self, req, connectors)?)
                 .attach_default_headers()
-                .headers(types::PaymentsAuthorizeType::get_headers(
-                    self, req, connectors,
-                )?)
-                .set_body(types::PaymentsAuthorizeType::get_request_body(
+                .headers(PaymentsAuthorizeType::get_headers(self, req, connectors)?)
+                .set_body(PaymentsAuthorizeType::get_request_body(
                     self, req, connectors,
                 )?)
                 .build(),
@@ -245,17 +229,17 @@ impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::P
 
     fn handle_response(
         &self,
-        data: &types::PaymentsAuthorizeRouterData,
+        data: &PaymentsAuthorizeRouterData,
         event_builder: Option<&mut ConnectorEvent>,
         res: Response,
-    ) -> CustomResult<types::PaymentsAuthorizeRouterData, errors::ConnectorError> {
+    ) -> CustomResult<PaymentsAuthorizeRouterData, errors::ConnectorError> {
         let response: bitpay::BitpayPaymentsResponse = res
             .response
             .parse_struct("Bitpay PaymentsAuthorizeResponse")
             .switch()?;
         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,
@@ -271,14 +255,12 @@ impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::P
     }
 }
 
-impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsResponseData>
-    for Bitpay
-{
+impl ConnectorIntegration<PSync, PaymentsSyncData, PaymentsResponseData> for Bitpay {
     fn get_headers(
         &self,
-        req: &types::PaymentsSyncRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        req: &PaymentsSyncRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
         self.build_headers(req, connectors)
     }
 
@@ -288,8 +270,8 @@ impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsRe
 
     fn get_url(
         &self,
-        req: &types::PaymentsSyncRouterData,
-        connectors: &settings::Connectors,
+        req: &PaymentsSyncRouterData,
+        connectors: &Connectors,
     ) -> CustomResult<String, errors::ConnectorError> {
         let auth = bitpay::BitpayAuthType::try_from(&req.connector_auth_type)
             .change_context(errors::ConnectorError::FailedToObtainAuthType)?;
@@ -308,32 +290,32 @@ impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsRe
 
     fn build_request(
         &self,
-        req: &types::PaymentsSyncRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        req: &PaymentsSyncRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
         Ok(Some(
-            services::RequestBuilder::new()
-                .method(services::Method::Get)
-                .url(&types::PaymentsSyncType::get_url(self, req, connectors)?)
+            RequestBuilder::new()
+                .method(Method::Get)
+                .url(&PaymentsSyncType::get_url(self, req, connectors)?)
                 .attach_default_headers()
-                .headers(types::PaymentsSyncType::get_headers(self, req, connectors)?)
+                .headers(PaymentsSyncType::get_headers(self, req, connectors)?)
                 .build(),
         ))
     }
 
     fn handle_response(
         &self,
-        data: &types::PaymentsSyncRouterData,
+        data: &PaymentsSyncRouterData,
         event_builder: Option<&mut ConnectorEvent>,
         res: Response,
-    ) -> CustomResult<types::PaymentsSyncRouterData, errors::ConnectorError> {
+    ) -> CustomResult<PaymentsSyncRouterData, errors::ConnectorError> {
         let response: bitpay::BitpayPaymentsResponse = res
             .response
             .parse_struct("bitpay PaymentsSyncResponse")
             .switch()?;
         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,
@@ -349,14 +331,12 @@ impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsRe
     }
 }
 
-impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::PaymentsResponseData>
-    for Bitpay
-{
+impl ConnectorIntegration<Capture, PaymentsCaptureData, PaymentsResponseData> for Bitpay {
     fn build_request(
         &self,
-        _req: &types::PaymentsCaptureRouterData,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        _req: &PaymentsCaptureRouterData,
+        _connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
         Err(errors::ConnectorError::FlowNotSupported {
             flow: "Capture".to_string(),
             connector: "Bitpay".to_string(),
@@ -365,17 +345,14 @@ impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::Payme
     }
 }
 
-impl ConnectorIntegration<api::Void, types::PaymentsCancelData, types::PaymentsResponseData>
-    for Bitpay
-{
-}
+impl ConnectorIntegration<Void, PaymentsCancelData, PaymentsResponseData> for Bitpay {}
 
-impl ConnectorIntegration<api::Execute, types::RefundsData, types::RefundsResponseData> for Bitpay {
+impl ConnectorIntegration<Execute, RefundsData, RefundsResponseData> for Bitpay {
     fn build_request(
         &self,
-        _req: &types::RefundsRouterData<api::Execute>,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        _req: &RefundsRouterData<Execute>,
+        _connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
         Err(
             errors::ConnectorError::NotImplemented("Refund flow not Implemented".to_string())
                 .into(),
@@ -383,16 +360,16 @@ impl ConnectorIntegration<api::Execute, types::RefundsData, types::RefundsRespon
     }
 }
 
-impl ConnectorIntegration<api::RSync, types::RefundsData, types::RefundsResponseData> for Bitpay {
+impl ConnectorIntegration<RSync, RefundsData, RefundsResponseData> for Bitpay {
     // default implementation of build_request method will be executed
 }
 
 #[async_trait::async_trait]
-impl api::IncomingWebhook for Bitpay {
+impl webhooks::IncomingWebhook for Bitpay {
     fn get_webhook_object_reference_id(
         &self,
-        request: &api::IncomingWebhookRequestDetails<'_>,
-    ) -> CustomResult<api::webhooks::ObjectReferenceId, errors::ConnectorError> {
+        request: &webhooks::IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<api_models::webhooks::ObjectReferenceId, errors::ConnectorError> {
         let notif: BitpayWebhookDetails = request
             .body
             .parse_struct("BitpayWebhookDetails")
@@ -404,33 +381,29 @@ impl api::IncomingWebhook for Bitpay {
 
     fn get_webhook_event_type(
         &self,
-        request: &api::IncomingWebhookRequestDetails<'_>,
-    ) -> CustomResult<api::IncomingWebhookEvent, errors::ConnectorError> {
+        request: &webhooks::IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<IncomingWebhookEvent, errors::ConnectorError> {
         let notif: BitpayWebhookDetails = request
             .body
             .parse_struct("BitpayWebhookDetails")
             .change_context(errors::ConnectorError::WebhookEventTypeNotFound)?;
         match notif.event.name {
             bitpay::WebhookEventType::Confirmed | bitpay::WebhookEventType::Completed => {
-                Ok(api::IncomingWebhookEvent::PaymentIntentSuccess)
-            }
-            bitpay::WebhookEventType::Paid => {
-                Ok(api::IncomingWebhookEvent::PaymentIntentProcessing)
-            }
-            bitpay::WebhookEventType::Declined => {
-                Ok(api::IncomingWebhookEvent::PaymentIntentFailure)
+                Ok(IncomingWebhookEvent::PaymentIntentSuccess)
             }
+            bitpay::WebhookEventType::Paid => Ok(IncomingWebhookEvent::PaymentIntentProcessing),
+            bitpay::WebhookEventType::Declined => Ok(IncomingWebhookEvent::PaymentIntentFailure),
             bitpay::WebhookEventType::Unknown
             | bitpay::WebhookEventType::Expired
             | bitpay::WebhookEventType::Invalid
             | bitpay::WebhookEventType::Refunded
-            | bitpay::WebhookEventType::Resent => Ok(api::IncomingWebhookEvent::EventNotSupported),
+            | bitpay::WebhookEventType::Resent => Ok(IncomingWebhookEvent::EventNotSupported),
         }
     }
 
     fn get_webhook_resource_object(
         &self,
-        request: &api::IncomingWebhookRequestDetails<'_>,
+        request: &webhooks::IncomingWebhookRequestDetails<'_>,
     ) -> CustomResult<Box<dyn masking::ErasedMaskSerialize>, errors::ConnectorError> {
         let notif: BitpayWebhookDetails = request
             .body
diff --git a/crates/router/src/connector/bitpay/transformers.rs b/crates/hyperswitch_connectors/src/connectors/bitpay/transformers.rs
similarity index 85%
rename from crates/router/src/connector/bitpay/transformers.rs
rename to crates/hyperswitch_connectors/src/connectors/bitpay/transformers.rs
index ffce669dcaf..1c42bfd08c8 100644
--- a/crates/router/src/connector/bitpay/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/bitpay/transformers.rs
@@ -1,13 +1,19 @@
-use common_utils::types::MinorUnit;
+use common_enums::enums;
+use common_utils::{request::Method, types::MinorUnit};
+use hyperswitch_domain_models::{
+    router_data::{ConnectorAuthType, RouterData},
+    router_flow_types::refunds::{Execute, RSync},
+    router_request_types::ResponseId,
+    router_response_types::{PaymentsResponseData, RedirectForm, RefundsResponseData},
+    types,
+};
+use hyperswitch_interfaces::errors;
 use masking::Secret;
-use reqwest::Url;
 use serde::{Deserialize, Serialize};
 
 use crate::{
-    connector::utils::PaymentsAuthorizeRequestData,
-    core::errors,
-    services,
-    types::{self, api, storage::enums, ConnectorAuthType},
+    types::{RefundsResponseRouterData, ResponseRouterData},
+    utils::PaymentsAuthorizeRequestData,
 };
 
 #[derive(Debug, Serialize)]
@@ -109,7 +115,7 @@ pub enum ExceptionStatus {
 #[derive(Default, Debug, Clone, Serialize, Deserialize)]
 #[serde(rename_all = "camelCase")]
 pub struct BitpayPaymentResponseData {
-    pub url: Option<Url>,
+    pub url: Option<url::Url>,
     pub status: BitpayPaymentStatus,
     pub price: MinorUnit,
     pub currency: String,
@@ -135,24 +141,23 @@ pub struct BitpayPaymentsResponse {
     facade: Option<String>,
 }
 
-impl<F, T>
-    TryFrom<types::ResponseRouterData<F, BitpayPaymentsResponse, T, types::PaymentsResponseData>>
-    for types::RouterData<F, T, types::PaymentsResponseData>
+impl<F, T> TryFrom<ResponseRouterData<F, BitpayPaymentsResponse, T, PaymentsResponseData>>
+    for RouterData<F, T, PaymentsResponseData>
 {
     type Error = error_stack::Report<errors::ConnectorError>;
     fn try_from(
-        item: types::ResponseRouterData<F, BitpayPaymentsResponse, T, types::PaymentsResponseData>,
+        item: ResponseRouterData<F, BitpayPaymentsResponse, T, PaymentsResponseData>,
     ) -> Result<Self, Self::Error> {
         let redirection_data = item
             .response
             .data
             .url
-            .map(|x| services::RedirectForm::from((x, services::Method::Get)));
-        let connector_id = types::ResponseId::ConnectorTransactionId(item.response.data.id.clone());
+            .map(|x| RedirectForm::from((x, Method::Get)));
+        let connector_id = ResponseId::ConnectorTransactionId(item.response.data.id.clone());
         let attempt_status = item.response.data.status;
         Ok(Self {
             status: enums::AttemptStatus::from(attempt_status),
-            response: Ok(types::PaymentsResponseData::TransactionResponse {
+            response: Ok(PaymentsResponseData::TransactionResponse {
                 resource_id: connector_id,
                 redirection_data,
                 mandate_reference: None,
@@ -218,15 +223,15 @@ pub struct RefundResponse {
     status: RefundStatus,
 }
 
-impl TryFrom<types::RefundsResponseRouterData<api::Execute, RefundResponse>>
-    for types::RefundsRouterData<api::Execute>
+impl TryFrom<RefundsResponseRouterData<Execute, RefundResponse>>
+    for types::RefundsRouterData<Execute>
 {
     type Error = error_stack::Report<errors::ConnectorError>;
     fn try_from(
-        item: types::RefundsResponseRouterData<api::Execute, RefundResponse>,
+        item: RefundsResponseRouterData<Execute, RefundResponse>,
     ) -> Result<Self, Self::Error> {
         Ok(Self {
-            response: Ok(types::RefundsResponseData {
+            response: Ok(RefundsResponseData {
                 connector_refund_id: item.response.id.to_string(),
                 refund_status: enums::RefundStatus::from(item.response.status),
             }),
@@ -235,15 +240,13 @@ impl TryFrom<types::RefundsResponseRouterData<api::Execute, RefundResponse>>
     }
 }
 
-impl TryFrom<types::RefundsResponseRouterData<api::RSync, RefundResponse>>
-    for types::RefundsRouterData<api::RSync>
-{
+impl TryFrom<RefundsResponseRouterData<RSync, RefundResponse>> for types::RefundsRouterData<RSync> {
     type Error = error_stack::Report<errors::ConnectorError>;
     fn try_from(
-        item: types::RefundsResponseRouterData<api::RSync, RefundResponse>,
+        item: RefundsResponseRouterData<RSync, RefundResponse>,
     ) -> Result<Self, Self::Error> {
         Ok(Self {
-            response: Ok(types::RefundsResponseData {
+            response: Ok(RefundsResponseData {
                 connector_refund_id: item.response.id.to_string(),
                 refund_status: enums::RefundStatus::from(item.response.status),
             }),
diff --git a/crates/router/src/connector/stax.rs b/crates/hyperswitch_connectors/src/connectors/stax.rs
similarity index 69%
rename from crates/router/src/connector/stax.rs
rename to crates/hyperswitch_connectors/src/connectors/stax.rs
index 8524a19309d..8ca847327a4 100644
--- a/crates/router/src/connector/stax.rs
+++ b/crates/hyperswitch_connectors/src/connectors/stax.rs
@@ -2,33 +2,53 @@ pub mod transformers;
 
 use std::fmt::Debug;
 
-use common_utils::{ext_traits::ByteSliceExt, request::RequestContent};
-use diesel_models::enums;
+use api_models::webhooks::IncomingWebhookEvent;
+use common_enums::enums;
+use common_utils::{
+    errors::CustomResult,
+    ext_traits::ByteSliceExt,
+    request::{Method, Request, RequestBuilder, RequestContent},
+};
 use error_stack::ResultExt;
-use masking::{PeekInterface, Secret};
-use transformers as stax;
-
-use self::stax::StaxWebhookEventType;
-use super::utils::{self as connector_utils, to_connector_meta, RefundsRequestData};
-use crate::{
-    configs::settings,
-    consts,
-    core::errors::{self, CustomResult},
-    events::connector_api_logs::ConnectorEvent,
-    headers,
-    services::{
-        self,
-        request::{self, Mask},
-        ConnectorIntegration, ConnectorValidation,
+use hyperswitch_domain_models::{
+    router_data::{AccessToken, ConnectorAuthType, ErrorResponse, RouterData},
+    router_flow_types::{
+        access_token_auth::AccessTokenAuth,
+        payments::{
+            Authorize, Capture, CreateConnectorCustomer, PSync, PaymentMethodToken, Session,
+            SetupMandate, Void,
+        },
+        refunds::{Execute, RSync},
     },
+    router_request_types::{
+        AccessTokenRequestData, ConnectorCustomerData, PaymentMethodTokenizationData,
+        PaymentsAuthorizeData, PaymentsCancelData, PaymentsCaptureData, PaymentsSessionData,
+        PaymentsSyncData, RefundsData, SetupMandateRequestData,
+    },
+    router_response_types::{PaymentsResponseData, RefundsResponseData},
     types::{
-        self,
-        api::{self, ConnectorCommon, ConnectorCommonExt},
-        ErrorResponse, Response,
+        ConnectorCustomerRouterData, PaymentsAuthorizeRouterData, PaymentsCancelRouterData,
+        PaymentsCaptureRouterData, PaymentsSyncRouterData, RefundSyncRouterData, RefundsRouterData,
+        TokenizationRouterData,
     },
-    utils::BytesExt,
 };
+use hyperswitch_interfaces::{
+    api::{self, ConnectorCommon, ConnectorCommonExt, ConnectorIntegration, ConnectorValidation},
+    configs::Connectors,
+    consts, errors,
+    events::connector_api_logs::ConnectorEvent,
+    types::{self, Response},
+    webhooks,
+};
+use masking::{Mask, PeekInterface, Secret};
+use transformers as stax;
 
+use self::stax::StaxWebhookEventType;
+use crate::{
+    constants::headers,
+    types::ResponseRouterData,
+    utils::{self, RefundsRequestData},
+};
 #[derive(Debug, Clone)]
 pub struct Stax;
 
@@ -51,9 +71,9 @@ where
 {
     fn build_headers(
         &self,
-        req: &types::RouterData<Flow, Request, Response>,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        req: &RouterData<Flow, Request, Response>,
+        _connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
         let mut header = vec![(
             headers::CONTENT_TYPE.to_string(),
             types::PaymentsAuthorizeType::get_content_type(self)
@@ -79,14 +99,14 @@ impl ConnectorCommon for Stax {
         "application/json"
     }
 
-    fn base_url<'a>(&self, connectors: &'a settings::Connectors) -> &'a str {
+    fn base_url<'a>(&self, connectors: &'a Connectors) -> &'a str {
         connectors.stax.base_url.as_ref()
     }
 
     fn get_auth_header(
         &self,
-        auth_type: &types::ConnectorAuthType,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        auth_type: &ConnectorAuthType,
+    ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
         let auth = stax::StaxAuthType::try_from(auth_type)
             .change_context(errors::ConnectorError::FailedToObtainAuthType)?;
 
@@ -126,7 +146,7 @@ impl ConnectorValidation for Stax {
         match capture_method {
             enums::CaptureMethod::Automatic | enums::CaptureMethod::Manual => Ok(()),
             enums::CaptureMethod::ManualMultiple | enums::CaptureMethod::Scheduled => Err(
-                connector_utils::construct_not_supported_error_report(capture_method, self.id()),
+                utils::construct_not_supported_error_report(capture_method, self.id()),
             ),
         }
     }
@@ -134,18 +154,14 @@ impl ConnectorValidation for Stax {
 
 impl api::ConnectorCustomer for Stax {}
 
-impl
-    ConnectorIntegration<
-        api::CreateConnectorCustomer,
-        types::ConnectorCustomerData,
-        types::PaymentsResponseData,
-    > for Stax
+impl ConnectorIntegration<CreateConnectorCustomer, ConnectorCustomerData, PaymentsResponseData>
+    for Stax
 {
     fn get_headers(
         &self,
-        req: &types::ConnectorCustomerRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        req: &ConnectorCustomerRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
         self.build_headers(req, connectors)
     }
 
@@ -155,16 +171,16 @@ impl
 
     fn get_url(
         &self,
-        _req: &types::ConnectorCustomerRouterData,
-        connectors: &settings::Connectors,
+        _req: &ConnectorCustomerRouterData,
+        connectors: &Connectors,
     ) -> CustomResult<String, errors::ConnectorError> {
         Ok(format!("{}customer", self.base_url(connectors),))
     }
 
     fn get_request_body(
         &self,
-        req: &types::ConnectorCustomerRouterData,
-        _connectors: &settings::Connectors,
+        req: &ConnectorCustomerRouterData,
+        _connectors: &Connectors,
     ) -> CustomResult<RequestContent, errors::ConnectorError> {
         let connector_req = stax::StaxCustomerRequest::try_from(req)?;
 
@@ -173,12 +189,12 @@ impl
 
     fn build_request(
         &self,
-        req: &types::ConnectorCustomerRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        req: &ConnectorCustomerRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
         Ok(Some(
-            services::RequestBuilder::new()
-                .method(services::Method::Post)
+            RequestBuilder::new()
+                .method(Method::Post)
                 .url(&types::ConnectorCustomerType::get_url(
                     self, req, connectors,
                 )?)
@@ -195,12 +211,12 @@ impl
 
     fn handle_response(
         &self,
-        data: &types::ConnectorCustomerRouterData,
+        data: &ConnectorCustomerRouterData,
         event_builder: Option<&mut ConnectorEvent>,
         res: Response,
-    ) -> CustomResult<types::ConnectorCustomerRouterData, errors::ConnectorError>
+    ) -> CustomResult<ConnectorCustomerRouterData, errors::ConnectorError>
     where
-        types::PaymentsResponseData: Clone,
+        PaymentsResponseData: Clone,
     {
         let response: stax::StaxCustomerResponse = res
             .response
@@ -210,7 +226,7 @@ impl
         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,
@@ -226,18 +242,14 @@ impl
     }
 }
 
-impl
-    ConnectorIntegration<
-        api::PaymentMethodToken,
-        types::PaymentMethodTokenizationData,
-        types::PaymentsResponseData,
-    > for Stax
+impl ConnectorIntegration<PaymentMethodToken, PaymentMethodTokenizationData, PaymentsResponseData>
+    for Stax
 {
     fn get_headers(
         &self,
-        req: &types::TokenizationRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        req: &TokenizationRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
         self.build_headers(req, connectors)
     }
 
@@ -247,16 +259,16 @@ impl
 
     fn get_url(
         &self,
-        _req: &types::TokenizationRouterData,
-        connectors: &settings::Connectors,
+        _req: &TokenizationRouterData,
+        connectors: &Connectors,
     ) -> CustomResult<String, errors::ConnectorError> {
         Ok(format!("{}payment-method/", self.base_url(connectors)))
     }
 
     fn get_request_body(
         &self,
-        req: &types::TokenizationRouterData,
-        _connectors: &settings::Connectors,
+        req: &TokenizationRouterData,
+        _connectors: &Connectors,
     ) -> CustomResult<RequestContent, errors::ConnectorError> {
         let connector_req = stax::StaxTokenRequest::try_from(req)?;
 
@@ -265,12 +277,12 @@ impl
 
     fn build_request(
         &self,
-        req: &types::TokenizationRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        req: &TokenizationRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
         Ok(Some(
-            services::RequestBuilder::new()
-                .method(services::Method::Post)
+            RequestBuilder::new()
+                .method(Method::Post)
                 .url(&types::TokenizationType::get_url(self, req, connectors)?)
                 .attach_default_headers()
                 .headers(types::TokenizationType::get_headers(self, req, connectors)?)
@@ -283,12 +295,12 @@ impl
 
     fn handle_response(
         &self,
-        data: &types::TokenizationRouterData,
+        data: &TokenizationRouterData,
         event_builder: Option<&mut ConnectorEvent>,
         res: Response,
-    ) -> CustomResult<types::TokenizationRouterData, errors::ConnectorError>
+    ) -> CustomResult<TokenizationRouterData, errors::ConnectorError>
     where
-        types::PaymentsResponseData: Clone,
+        PaymentsResponseData: Clone,
     {
         let response: stax::StaxTokenResponse = res
             .response
@@ -298,7 +310,7 @@ impl
         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,
@@ -314,33 +326,18 @@ impl
     }
 }
 
-impl ConnectorIntegration<api::Session, types::PaymentsSessionData, types::PaymentsResponseData>
-    for Stax
-{
+impl ConnectorIntegration<Session, PaymentsSessionData, PaymentsResponseData> for Stax {
     //TODO: implement sessions flow
 }
 
-impl ConnectorIntegration<api::AccessTokenAuth, types::AccessTokenRequestData, types::AccessToken>
-    for Stax
-{
-}
+impl ConnectorIntegration<AccessTokenAuth, AccessTokenRequestData, AccessToken> for Stax {}
 
-impl
-    ConnectorIntegration<
-        api::SetupMandate,
-        types::SetupMandateRequestData,
-        types::PaymentsResponseData,
-    > for Stax
-{
+impl ConnectorIntegration<SetupMandate, SetupMandateRequestData, PaymentsResponseData> for Stax {
     fn build_request(
         &self,
-        _req: &types::RouterData<
-            api::SetupMandate,
-            types::SetupMandateRequestData,
-            types::PaymentsResponseData,
-        >,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        _req: &RouterData<SetupMandate, SetupMandateRequestData, PaymentsResponseData>,
+        _connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
         Err(
             errors::ConnectorError::NotImplemented("Setup Mandate flow for Stax".to_string())
                 .into(),
@@ -348,14 +345,12 @@ impl
     }
 }
 
-impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::PaymentsResponseData>
-    for Stax
-{
+impl ConnectorIntegration<Authorize, PaymentsAuthorizeData, PaymentsResponseData> for Stax {
     fn get_headers(
         &self,
-        req: &types::PaymentsAuthorizeRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        req: &PaymentsAuthorizeRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
         self.build_headers(req, connectors)
     }
 
@@ -365,16 +360,16 @@ impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::P
 
     fn get_url(
         &self,
-        _req: &types::PaymentsAuthorizeRouterData,
-        connectors: &settings::Connectors,
+        _req: &PaymentsAuthorizeRouterData,
+        connectors: &Connectors,
     ) -> CustomResult<String, errors::ConnectorError> {
         Ok(format!("{}charge", self.base_url(connectors),))
     }
 
     fn get_request_body(
         &self,
-        req: &types::PaymentsAuthorizeRouterData,
-        _connectors: &settings::Connectors,
+        req: &PaymentsAuthorizeRouterData,
+        _connectors: &Connectors,
     ) -> CustomResult<RequestContent, errors::ConnectorError> {
         let connector_router_data = stax::StaxRouterData::try_from((
             &self.get_currency_unit(),
@@ -389,12 +384,12 @@ impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::P
 
     fn build_request(
         &self,
-        req: &types::PaymentsAuthorizeRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        req: &PaymentsAuthorizeRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
         Ok(Some(
-            services::RequestBuilder::new()
-                .method(services::Method::Post)
+            RequestBuilder::new()
+                .method(Method::Post)
                 .url(&types::PaymentsAuthorizeType::get_url(
                     self, req, connectors,
                 )?)
@@ -411,10 +406,10 @@ impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::P
 
     fn handle_response(
         &self,
-        data: &types::PaymentsAuthorizeRouterData,
+        data: &PaymentsAuthorizeRouterData,
         event_builder: Option<&mut ConnectorEvent>,
         res: Response,
-    ) -> CustomResult<types::PaymentsAuthorizeRouterData, errors::ConnectorError> {
+    ) -> CustomResult<PaymentsAuthorizeRouterData, errors::ConnectorError> {
         let response: stax::StaxPaymentsResponse = res
             .response
             .parse_struct("StaxPaymentsAuthorizeResponse")
@@ -423,7 +418,7 @@ impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::P
         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,
@@ -439,14 +434,12 @@ impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::P
     }
 }
 
-impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsResponseData>
-    for Stax
-{
+impl ConnectorIntegration<PSync, PaymentsSyncData, PaymentsResponseData> for Stax {
     fn get_headers(
         &self,
-        req: &types::PaymentsSyncRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        req: &PaymentsSyncRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
         self.build_headers(req, connectors)
     }
 
@@ -456,8 +449,8 @@ impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsRe
 
     fn get_url(
         &self,
-        req: &types::PaymentsSyncRouterData,
-        connectors: &settings::Connectors,
+        req: &PaymentsSyncRouterData,
+        connectors: &Connectors,
     ) -> CustomResult<String, errors::ConnectorError> {
         let connector_payment_id = req
             .request
@@ -473,12 +466,12 @@ impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsRe
 
     fn build_request(
         &self,
-        req: &types::PaymentsSyncRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        req: &PaymentsSyncRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
         Ok(Some(
-            services::RequestBuilder::new()
-                .method(services::Method::Get)
+            RequestBuilder::new()
+                .method(Method::Get)
                 .url(&types::PaymentsSyncType::get_url(self, req, connectors)?)
                 .attach_default_headers()
                 .headers(types::PaymentsSyncType::get_headers(self, req, connectors)?)
@@ -488,10 +481,10 @@ impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsRe
 
     fn handle_response(
         &self,
-        data: &types::PaymentsSyncRouterData,
+        data: &PaymentsSyncRouterData,
         event_builder: Option<&mut ConnectorEvent>,
         res: Response,
-    ) -> CustomResult<types::PaymentsSyncRouterData, errors::ConnectorError> {
+    ) -> CustomResult<PaymentsSyncRouterData, errors::ConnectorError> {
         let response: stax::StaxPaymentsResponse = res
             .response
             .parse_struct("StaxPaymentsSyncResponse")
@@ -500,7 +493,7 @@ impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsRe
         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,
@@ -516,14 +509,12 @@ impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsRe
     }
 }
 
-impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::PaymentsResponseData>
-    for Stax
-{
+impl ConnectorIntegration<Capture, PaymentsCaptureData, PaymentsResponseData> for Stax {
     fn get_headers(
         &self,
-        req: &types::PaymentsCaptureRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        req: &PaymentsCaptureRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
         self.build_headers(req, connectors)
     }
 
@@ -533,8 +524,8 @@ impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::Payme
 
     fn get_url(
         &self,
-        req: &types::PaymentsCaptureRouterData,
-        connectors: &settings::Connectors,
+        req: &PaymentsCaptureRouterData,
+        connectors: &Connectors,
     ) -> CustomResult<String, errors::ConnectorError> {
         Ok(format!(
             "{}/transaction/{}/capture",
@@ -545,8 +536,8 @@ impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::Payme
 
     fn get_request_body(
         &self,
-        req: &types::PaymentsCaptureRouterData,
-        _connectors: &settings::Connectors,
+        req: &PaymentsCaptureRouterData,
+        _connectors: &Connectors,
     ) -> CustomResult<RequestContent, errors::ConnectorError> {
         let connector_router_data = stax::StaxRouterData::try_from((
             &self.get_currency_unit(),
@@ -560,12 +551,12 @@ impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::Payme
 
     fn build_request(
         &self,
-        req: &types::PaymentsCaptureRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        req: &PaymentsCaptureRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
         Ok(Some(
-            services::RequestBuilder::new()
-                .method(services::Method::Post)
+            RequestBuilder::new()
+                .method(Method::Post)
                 .url(&types::PaymentsCaptureType::get_url(self, req, connectors)?)
                 .attach_default_headers()
                 .headers(types::PaymentsCaptureType::get_headers(
@@ -580,10 +571,10 @@ impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::Payme
 
     fn handle_response(
         &self,
-        data: &types::PaymentsCaptureRouterData,
+        data: &PaymentsCaptureRouterData,
         event_builder: Option<&mut ConnectorEvent>,
         res: Response,
-    ) -> CustomResult<types::PaymentsCaptureRouterData, errors::ConnectorError> {
+    ) -> CustomResult<PaymentsCaptureRouterData, errors::ConnectorError> {
         let response: stax::StaxPaymentsResponse = res
             .response
             .parse_struct("StaxPaymentsCaptureResponse")
@@ -592,7 +583,7 @@ impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::Payme
         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,
@@ -608,14 +599,12 @@ impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::Payme
     }
 }
 
-impl ConnectorIntegration<api::Void, types::PaymentsCancelData, types::PaymentsResponseData>
-    for Stax
-{
+impl ConnectorIntegration<Void, PaymentsCancelData, PaymentsResponseData> for Stax {
     fn get_headers(
         &self,
-        req: &types::PaymentsCancelRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        req: &PaymentsCancelRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
         self.build_headers(req, connectors)
     }
 
@@ -625,8 +614,8 @@ impl ConnectorIntegration<api::Void, types::PaymentsCancelData, types::PaymentsR
 
     fn get_url(
         &self,
-        req: &types::PaymentsCancelRouterData,
-        connectors: &settings::Connectors,
+        req: &PaymentsCancelRouterData,
+        connectors: &Connectors,
     ) -> CustomResult<String, errors::ConnectorError> {
         Ok(format!(
             "{}/transaction/{}/void-or-refund",
@@ -637,12 +626,12 @@ impl ConnectorIntegration<api::Void, types::PaymentsCancelData, types::PaymentsR
 
     fn build_request(
         &self,
-        req: &types::PaymentsCancelRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        req: &PaymentsCancelRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
         Ok(Some(
-            services::RequestBuilder::new()
-                .method(services::Method::Post)
+            RequestBuilder::new()
+                .method(Method::Post)
                 .url(&types::PaymentsVoidType::get_url(self, req, connectors)?)
                 .attach_default_headers()
                 .headers(types::PaymentsVoidType::get_headers(self, req, connectors)?)
@@ -652,10 +641,10 @@ impl ConnectorIntegration<api::Void, types::PaymentsCancelData, types::PaymentsR
 
     fn handle_response(
         &self,
-        data: &types::PaymentsCancelRouterData,
+        data: &PaymentsCancelRouterData,
         event_builder: Option<&mut ConnectorEvent>,
         res: Response,
-    ) -> CustomResult<types::PaymentsCancelRouterData, errors::ConnectorError> {
+    ) -> CustomResult<PaymentsCancelRouterData, errors::ConnectorError> {
         let response: stax::StaxPaymentsResponse = res
             .response
             .parse_struct("StaxPaymentsVoidResponse")
@@ -664,7 +653,7 @@ impl ConnectorIntegration<api::Void, types::PaymentsCancelData, types::PaymentsR
         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,
@@ -680,12 +669,12 @@ impl ConnectorIntegration<api::Void, types::PaymentsCancelData, types::PaymentsR
     }
 }
 
-impl ConnectorIntegration<api::Execute, types::RefundsData, types::RefundsResponseData> for Stax {
+impl ConnectorIntegration<Execute, RefundsData, RefundsResponseData> for Stax {
     fn get_headers(
         &self,
-        req: &types::RefundsRouterData<api::Execute>,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        req: &RefundsRouterData<Execute>,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
         self.build_headers(req, connectors)
     }
 
@@ -695,12 +684,12 @@ impl ConnectorIntegration<api::Execute, types::RefundsData, types::RefundsRespon
 
     fn get_url(
         &self,
-        req: &types::RefundsRouterData<api::Execute>,
-        connectors: &settings::Connectors,
+        req: &RefundsRouterData<Execute>,
+        connectors: &Connectors,
     ) -> CustomResult<String, errors::ConnectorError> {
         let connector_transaction_id = if req.request.connector_metadata.is_some() {
             let stax_capture: stax::StaxMetaData =
-                to_connector_meta(req.request.connector_metadata.clone())?;
+                utils::to_connector_meta(req.request.connector_metadata.clone())?;
             stax_capture.capture_id
         } else {
             req.request.connector_transaction_id.clone()
@@ -715,8 +704,8 @@ impl ConnectorIntegration<api::Execute, types::RefundsData, types::RefundsRespon
 
     fn get_request_body(
         &self,
-        req: &types::RefundsRouterData<api::Execute>,
-        _connectors: &settings::Connectors,
+        req: &RefundsRouterData<Execute>,
+        _connectors: &Connectors,
     ) -> CustomResult<RequestContent, errors::ConnectorError> {
         let connector_router_data = stax::StaxRouterData::try_from((
             &self.get_currency_unit(),
@@ -730,11 +719,11 @@ impl ConnectorIntegration<api::Execute, types::RefundsData, types::RefundsRespon
 
     fn build_request(
         &self,
-        req: &types::RefundsRouterData<api::Execute>,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
-        let request = services::RequestBuilder::new()
-            .method(services::Method::Post)
+        req: &RefundsRouterData<Execute>,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
+        let request = RequestBuilder::new()
+            .method(Method::Post)
             .url(&types::RefundExecuteType::get_url(self, req, connectors)?)
             .attach_default_headers()
             .headers(types::RefundExecuteType::get_headers(
@@ -749,10 +738,10 @@ impl ConnectorIntegration<api::Execute, types::RefundsData, types::RefundsRespon
 
     fn handle_response(
         &self,
-        data: &types::RefundsRouterData<api::Execute>,
+        data: &RefundsRouterData<Execute>,
         event_builder: Option<&mut ConnectorEvent>,
         res: Response,
-    ) -> CustomResult<types::RefundsRouterData<api::Execute>, errors::ConnectorError> {
+    ) -> CustomResult<RefundsRouterData<Execute>, errors::ConnectorError> {
         let response: stax::RefundResponse = res
             .response
             .parse_struct("StaxRefundResponse")
@@ -761,7 +750,7 @@ impl ConnectorIntegration<api::Execute, types::RefundsData, types::RefundsRespon
         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,
@@ -777,12 +766,12 @@ impl ConnectorIntegration<api::Execute, types::RefundsData, types::RefundsRespon
     }
 }
 
-impl ConnectorIntegration<api::RSync, types::RefundsData, types::RefundsResponseData> for Stax {
+impl ConnectorIntegration<RSync, RefundsData, RefundsResponseData> for Stax {
     fn get_headers(
         &self,
-        req: &types::RefundSyncRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        req: &RefundSyncRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
         self.build_headers(req, connectors)
     }
 
@@ -792,8 +781,8 @@ impl ConnectorIntegration<api::RSync, types::RefundsData, types::RefundsResponse
 
     fn get_url(
         &self,
-        req: &types::RefundSyncRouterData,
-        connectors: &settings::Connectors,
+        req: &RefundSyncRouterData,
+        connectors: &Connectors,
     ) -> CustomResult<String, errors::ConnectorError> {
         Ok(format!(
             "{}/transaction/{}",
@@ -804,12 +793,12 @@ impl ConnectorIntegration<api::RSync, types::RefundsData, types::RefundsResponse
 
     fn build_request(
         &self,
-        req: &types::RefundSyncRouterData,
-        connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        req: &RefundSyncRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
         Ok(Some(
-            services::RequestBuilder::new()
-                .method(services::Method::Get)
+            RequestBuilder::new()
+                .method(Method::Get)
                 .url(&types::RefundSyncType::get_url(self, req, connectors)?)
                 .attach_default_headers()
                 .headers(types::RefundSyncType::get_headers(self, req, connectors)?)
@@ -819,10 +808,10 @@ impl ConnectorIntegration<api::RSync, types::RefundsData, types::RefundsResponse
 
     fn handle_response(
         &self,
-        data: &types::RefundSyncRouterData,
+        data: &RefundSyncRouterData,
         event_builder: Option<&mut ConnectorEvent>,
         res: Response,
-    ) -> CustomResult<types::RefundSyncRouterData, errors::ConnectorError> {
+    ) -> CustomResult<RefundSyncRouterData, errors::ConnectorError> {
         let response: stax::RefundResponse = res
             .response
             .parse_struct("StaxRefundSyncResponse")
@@ -831,7 +820,7 @@ impl ConnectorIntegration<api::RSync, types::RefundsData, types::RefundsResponse
         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,
@@ -848,10 +837,10 @@ impl ConnectorIntegration<api::RSync, types::RefundsData, types::RefundsResponse
 }
 
 #[async_trait::async_trait]
-impl api::IncomingWebhook for Stax {
+impl webhooks::IncomingWebhook for Stax {
     async fn verify_webhook_source(
         &self,
-        _request: &api::IncomingWebhookRequestDetails<'_>,
+        _request: &webhooks::IncomingWebhookRequestDetails<'_>,
         _merchant_id: &common_utils::id_type::MerchantId,
         _connector_webhook_details: Option<common_utils::pii::SecretSerdeValue>,
         _connector_account_details: common_utils::crypto::Encryptable<Secret<serde_json::Value>>,
@@ -862,8 +851,8 @@ impl api::IncomingWebhook for Stax {
 
     fn get_webhook_object_reference_id(
         &self,
-        request: &api::IncomingWebhookRequestDetails<'_>,
-    ) -> CustomResult<api::webhooks::ObjectReferenceId, errors::ConnectorError> {
+        request: &webhooks::IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<api_models::webhooks::ObjectReferenceId, errors::ConnectorError> {
         let webhook_body: stax::StaxWebhookBody = request
             .body
             .parse_struct("StaxWebhookBody")
@@ -894,8 +883,8 @@ impl api::IncomingWebhook for Stax {
 
     fn get_webhook_event_type(
         &self,
-        request: &api::IncomingWebhookRequestDetails<'_>,
-    ) -> CustomResult<api::IncomingWebhookEvent, errors::ConnectorError> {
+        request: &webhooks::IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<IncomingWebhookEvent, errors::ConnectorError> {
         let details: stax::StaxWebhookBody = request
             .body
             .parse_struct("StaxWebhookEventType")
@@ -903,24 +892,24 @@ impl api::IncomingWebhook for Stax {
 
         Ok(match &details.transaction_type {
             StaxWebhookEventType::Refund => match &details.success {
-                true => api::IncomingWebhookEvent::RefundSuccess,
-                false => api::IncomingWebhookEvent::RefundFailure,
+                true => IncomingWebhookEvent::RefundSuccess,
+                false => IncomingWebhookEvent::RefundFailure,
             },
             StaxWebhookEventType::Capture | StaxWebhookEventType::Charge => {
                 match &details.success {
-                    true => api::IncomingWebhookEvent::PaymentIntentSuccess,
-                    false => api::IncomingWebhookEvent::PaymentIntentFailure,
+                    true => IncomingWebhookEvent::PaymentIntentSuccess,
+                    false => IncomingWebhookEvent::PaymentIntentFailure,
                 }
             }
             StaxWebhookEventType::PreAuth
             | StaxWebhookEventType::Void
-            | StaxWebhookEventType::Unknown => api::IncomingWebhookEvent::EventNotSupported,
+            | StaxWebhookEventType::Unknown => IncomingWebhookEvent::EventNotSupported,
         })
     }
 
     fn get_webhook_resource_object(
         &self,
-        request: &api::IncomingWebhookRequestDetails<'_>,
+        request: &webhooks::IncomingWebhookRequestDetails<'_>,
     ) -> CustomResult<Box<dyn masking::ErasedMaskSerialize>, errors::ConnectorError> {
         let reference_object: serde_json::Value = serde_json::from_slice(request.body)
             .change_context(errors::ConnectorError::WebhookResourceObjectNotFound)?;
diff --git a/crates/router/src/connector/stax/transformers.rs b/crates/hyperswitch_connectors/src/connectors/stax/transformers.rs
similarity index 73%
rename from crates/router/src/connector/stax/transformers.rs
rename to crates/hyperswitch_connectors/src/connectors/stax/transformers.rs
index d814deef264..8c767e848da 100644
--- a/crates/router/src/connector/stax/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/stax/transformers.rs
@@ -1,15 +1,25 @@
+use common_enums::enums;
 use common_utils::pii::Email;
 use error_stack::ResultExt;
+use hyperswitch_domain_models::{
+    payment_method_data::{BankDebitData, PaymentMethodData},
+    router_data::{ConnectorAuthType, PaymentMethodToken, RouterData},
+    router_flow_types::refunds::{Execute, RSync},
+    router_request_types::ResponseId,
+    router_response_types::{PaymentsResponseData, RefundsResponseData},
+    types,
+};
+use hyperswitch_interfaces::{api, errors};
 use masking::{ExposeInterface, Secret};
 use serde::{Deserialize, Serialize};
 
 use crate::{
-    connector::utils::{
-        self, missing_field_err, CardData, PaymentsAuthorizeRequestData, RouterData,
-    },
-    core::errors,
-    types::{self, api, domain, storage::enums},
+    types::{RefundsResponseRouterData, ResponseRouterData},
     unimplemented_payment_method,
+    utils::{
+        self, missing_field_err, CardData as CardDataUtil, PaymentsAuthorizeRequestData,
+        RouterData as _,
+    },
 };
 
 #[derive(Debug, Serialize)]
@@ -59,7 +69,7 @@ impl TryFrom<&StaxRouterData<&types::PaymentsAuthorizeRouterData>> for StaxPayme
         let total = item.amount;
 
         match item.router_data.request.payment_method_data.clone() {
-            domain::PaymentMethodData::Card(_) => {
+            PaymentMethodData::Card(_) => {
                 let pm_token = item.router_data.get_payment_method_token()?;
                 let pre_auth = !item.router_data.request.is_auto_capture()?;
                 Ok(Self {
@@ -68,17 +78,15 @@ impl TryFrom<&StaxRouterData<&types::PaymentsAuthorizeRouterData>> for StaxPayme
                     is_refundable: true,
                     pre_auth,
                     payment_method_id: match pm_token {
-                        types::PaymentMethodToken::Token(token) => token,
-                        types::PaymentMethodToken::ApplePayDecrypt(_) => Err(
+                        PaymentMethodToken::Token(token) => token,
+                        PaymentMethodToken::ApplePayDecrypt(_) => Err(
                             unimplemented_payment_method!("Apple Pay", "Simplified", "Stax"),
                         )?,
                     },
                     idempotency_id: Some(item.router_data.connector_request_reference_id.clone()),
                 })
             }
-            domain::PaymentMethodData::BankDebit(domain::BankDebitData::AchBankDebit {
-                ..
-            }) => {
+            PaymentMethodData::BankDebit(BankDebitData::AchBankDebit { .. }) => {
                 let pm_token = item.router_data.get_payment_method_token()?;
                 let pre_auth = !item.router_data.request.is_auto_capture()?;
                 Ok(Self {
@@ -87,33 +95,31 @@ impl TryFrom<&StaxRouterData<&types::PaymentsAuthorizeRouterData>> for StaxPayme
                     is_refundable: true,
                     pre_auth,
                     payment_method_id: match pm_token {
-                        types::PaymentMethodToken::Token(token) => token,
-                        types::PaymentMethodToken::ApplePayDecrypt(_) => Err(
+                        PaymentMethodToken::Token(token) => token,
+                        PaymentMethodToken::ApplePayDecrypt(_) => Err(
                             unimplemented_payment_method!("Apple Pay", "Simplified", "Stax"),
                         )?,
                     },
                     idempotency_id: Some(item.router_data.connector_request_reference_id.clone()),
                 })
             }
-            domain::PaymentMethodData::BankDebit(_)
-            | domain::PaymentMethodData::Wallet(_)
-            | domain::PaymentMethodData::PayLater(_)
-            | domain::PaymentMethodData::BankRedirect(_)
-            | domain::PaymentMethodData::BankTransfer(_)
-            | domain::PaymentMethodData::Crypto(_)
-            | domain::PaymentMethodData::MandatePayment
-            | domain::PaymentMethodData::Reward
-            | domain::PaymentMethodData::RealTimePayment(_)
-            | domain::PaymentMethodData::Voucher(_)
-            | domain::PaymentMethodData::GiftCard(_)
-            | domain::PaymentMethodData::CardRedirect(_)
-            | domain::PaymentMethodData::Upi(_)
-            | domain::PaymentMethodData::OpenBanking(_)
-            | domain::PaymentMethodData::CardToken(_) => {
-                Err(errors::ConnectorError::NotImplemented(
-                    utils::get_unimplemented_payment_method_error_message("Stax"),
-                ))?
-            }
+            PaymentMethodData::BankDebit(_)
+            | PaymentMethodData::Wallet(_)
+            | PaymentMethodData::PayLater(_)
+            | PaymentMethodData::BankRedirect(_)
+            | PaymentMethodData::BankTransfer(_)
+            | PaymentMethodData::Crypto(_)
+            | PaymentMethodData::MandatePayment
+            | PaymentMethodData::Reward
+            | PaymentMethodData::RealTimePayment(_)
+            | PaymentMethodData::Voucher(_)
+            | PaymentMethodData::GiftCard(_)
+            | PaymentMethodData::CardRedirect(_)
+            | PaymentMethodData::Upi(_)
+            | PaymentMethodData::OpenBanking(_)
+            | PaymentMethodData::CardToken(_) => Err(errors::ConnectorError::NotImplemented(
+                utils::get_unimplemented_payment_method_error_message("Stax"),
+            ))?,
         }
     }
 }
@@ -123,11 +129,11 @@ pub struct StaxAuthType {
     pub(super) api_key: Secret<String>,
 }
 
-impl TryFrom<&types::ConnectorAuthType> for StaxAuthType {
+impl TryFrom<&ConnectorAuthType> for StaxAuthType {
     type Error = error_stack::Report<errors::ConnectorError>;
-    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()),
@@ -165,16 +171,15 @@ pub struct StaxCustomerResponse {
     id: Secret<String>,
 }
 
-impl<F, T>
-    TryFrom<types::ResponseRouterData<F, StaxCustomerResponse, T, types::PaymentsResponseData>>
-    for types::RouterData<F, T, types::PaymentsResponseData>
+impl<F, T> TryFrom<ResponseRouterData<F, StaxCustomerResponse, T, PaymentsResponseData>>
+    for RouterData<F, T, PaymentsResponseData>
 {
     type Error = error_stack::Report<errors::ConnectorError>;
     fn try_from(
-        item: types::ResponseRouterData<F, StaxCustomerResponse, T, types::PaymentsResponseData>,
+        item: ResponseRouterData<F, StaxCustomerResponse, T, PaymentsResponseData>,
     ) -> Result<Self, Self::Error> {
         Ok(Self {
-            response: Ok(types::PaymentsResponseData::ConnectorCustomerResponse {
+            response: Ok(PaymentsResponseData::ConnectorCustomerResponse {
                 connector_customer_id: item.response.id.expose(),
             }),
             ..item.data
@@ -215,7 +220,7 @@ impl TryFrom<&types::TokenizationRouterData> for StaxTokenRequest {
     fn try_from(item: &types::TokenizationRouterData) -> Result<Self, Self::Error> {
         let customer_id = item.get_connector_customer_id()?;
         match item.request.payment_method_data.clone() {
-            domain::PaymentMethodData::Card(card_data) => {
+            PaymentMethodData::Card(card_data) => {
                 let stax_card_data = StaxTokenizeData {
                     card_exp: card_data
                         .get_card_expiry_month_year_2_digit_with_delimiter("".to_string())?,
@@ -228,7 +233,7 @@ impl TryFrom<&types::TokenizationRouterData> for StaxTokenRequest {
                 };
                 Ok(Self::Card(stax_card_data))
             }
-            domain::PaymentMethodData::BankDebit(domain::BankDebitData::AchBankDebit {
+            PaymentMethodData::BankDebit(BankDebitData::AchBankDebit {
                 account_number,
                 routing_number,
                 bank_name,
@@ -248,25 +253,23 @@ impl TryFrom<&types::TokenizationRouterData> for StaxTokenRequest {
                 };
                 Ok(Self::Bank(stax_bank_data))
             }
-            domain::PaymentMethodData::BankDebit(_)
-            | domain::PaymentMethodData::Wallet(_)
-            | domain::PaymentMethodData::PayLater(_)
-            | domain::PaymentMethodData::BankRedirect(_)
-            | domain::PaymentMethodData::BankTransfer(_)
-            | domain::PaymentMethodData::Crypto(_)
-            | domain::PaymentMethodData::MandatePayment
-            | domain::PaymentMethodData::Reward
-            | domain::PaymentMethodData::RealTimePayment(_)
-            | domain::PaymentMethodData::Voucher(_)
-            | domain::PaymentMethodData::GiftCard(_)
-            | domain::PaymentMethodData::CardRedirect(_)
-            | domain::PaymentMethodData::Upi(_)
-            | domain::PaymentMethodData::OpenBanking(_)
-            | domain::PaymentMethodData::CardToken(_) => {
-                Err(errors::ConnectorError::NotImplemented(
-                    utils::get_unimplemented_payment_method_error_message("Stax"),
-                ))?
-            }
+            PaymentMethodData::BankDebit(_)
+            | PaymentMethodData::Wallet(_)
+            | PaymentMethodData::PayLater(_)
+            | PaymentMethodData::BankRedirect(_)
+            | PaymentMethodData::BankTransfer(_)
+            | PaymentMethodData::Crypto(_)
+            | PaymentMethodData::MandatePayment
+            | PaymentMethodData::Reward
+            | PaymentMethodData::RealTimePayment(_)
+            | PaymentMethodData::Voucher(_)
+            | PaymentMethodData::GiftCard(_)
+            | PaymentMethodData::CardRedirect(_)
+            | PaymentMethodData::Upi(_)
+            | PaymentMethodData::OpenBanking(_)
+            | PaymentMethodData::CardToken(_) => Err(errors::ConnectorError::NotImplemented(
+                utils::get_unimplemented_payment_method_error_message("Stax"),
+            ))?,
         }
     }
 }
@@ -276,15 +279,15 @@ pub struct StaxTokenResponse {
     id: Secret<String>,
 }
 
-impl<F, T> TryFrom<types::ResponseRouterData<F, StaxTokenResponse, T, types::PaymentsResponseData>>
-    for types::RouterData<F, T, types::PaymentsResponseData>
+impl<F, T> TryFrom<ResponseRouterData<F, StaxTokenResponse, T, PaymentsResponseData>>
+    for RouterData<F, T, PaymentsResponseData>
 {
     type Error = error_stack::Report<errors::ConnectorError>;
     fn try_from(
-        item: types::ResponseRouterData<F, StaxTokenResponse, T, types::PaymentsResponseData>,
+        item: ResponseRouterData<F, StaxTokenResponse, T, PaymentsResponseData>,
     ) -> Result<Self, Self::Error> {
         Ok(Self {
-            response: Ok(types::PaymentsResponseData::TokenizationResponse {
+            response: Ok(PaymentsResponseData::TokenizationResponse {
                 token: item.response.id.expose(),
             }),
             ..item.data
@@ -321,13 +324,12 @@ pub struct StaxMetaData {
     pub capture_id: String,
 }
 
-impl<F, T>
-    TryFrom<types::ResponseRouterData<F, StaxPaymentsResponse, T, types::PaymentsResponseData>>
-    for types::RouterData<F, T, types::PaymentsResponseData>
+impl<F, T> TryFrom<ResponseRouterData<F, StaxPaymentsResponse, T, PaymentsResponseData>>
+    for RouterData<F, T, PaymentsResponseData>
 {
     type Error = error_stack::Report<errors::ConnectorError>;
     fn try_from(
-        item: types::ResponseRouterData<F, StaxPaymentsResponse, T, types::PaymentsResponseData>,
+        item: ResponseRouterData<F, StaxPaymentsResponse, T, PaymentsResponseData>,
     ) -> Result<Self, Self::Error> {
         let mut connector_metadata = None;
         let mut status = match item.response.success {
@@ -354,8 +356,8 @@ impl<F, T>
 
         Ok(Self {
             status,
-            response: Ok(types::PaymentsResponseData::TransactionResponse {
-                resource_id: types::ResponseId::ConnectorTransactionId(item.response.id.clone()),
+            response: Ok(PaymentsResponseData::TransactionResponse {
+                resource_id: ResponseId::ConnectorTransactionId(item.response.id.clone()),
                 redirection_data: None,
                 mandate_reference: None,
                 connector_metadata,
@@ -415,12 +417,12 @@ pub struct RefundResponse {
     child_transactions: Vec<ChildTransactionsInResponse>,
 }
 
-impl TryFrom<types::RefundsResponseRouterData<api::Execute, RefundResponse>>
-    for types::RefundsRouterData<api::Execute>
+impl TryFrom<RefundsResponseRouterData<Execute, RefundResponse>>
+    for types::RefundsRouterData<Execute>
 {
     type Error = error_stack::Report<errors::ConnectorError>;
     fn try_from(
-        item: types::RefundsResponseRouterData<api::Execute, RefundResponse>,
+        item: RefundsResponseRouterData<Execute, RefundResponse>,
     ) -> Result<Self, Self::Error> {
         let refund_amount = utils::to_currency_base_unit_asf64(
             item.data.request.refund_amount,
@@ -450,7 +452,7 @@ impl TryFrom<types::RefundsResponseRouterData<api::Execute, RefundResponse>>
         };
 
         Ok(Self {
-            response: Ok(types::RefundsResponseData {
+            response: Ok(RefundsResponseData {
                 connector_refund_id: refund_txn.id.clone(),
                 refund_status,
             }),
@@ -459,19 +461,17 @@ impl TryFrom<types::RefundsResponseRouterData<api::Execute, RefundResponse>>
     }
 }
 
-impl TryFrom<types::RefundsResponseRouterData<api::RSync, RefundResponse>>
-    for types::RefundsRouterData<api::RSync>
-{
+impl TryFrom<RefundsResponseRouterData<RSync, RefundResponse>> for types::RefundsRouterData<RSync> {
     type Error = error_stack::Report<errors::ConnectorError>;
     fn try_from(
-        item: types::RefundsResponseRouterData<api::RSync, RefundResponse>,
+        item: RefundsResponseRouterData<RSync, RefundResponse>,
     ) -> Result<Self, Self::Error> {
         let refund_status = match item.response.success {
             true => enums::RefundStatus::Success,
             false => enums::RefundStatus::Failure,
         };
         Ok(Self {
-            response: Ok(types::RefundsResponseData {
+            response: Ok(RefundsResponseData {
                 connector_refund_id: item.response.id,
                 refund_status,
             }),
diff --git a/crates/hyperswitch_connectors/src/constants.rs b/crates/hyperswitch_connectors/src/constants.rs
index 8a5a2ff543a..a8d08424190 100644
--- a/crates/hyperswitch_connectors/src/constants.rs
+++ b/crates/hyperswitch_connectors/src/constants.rs
@@ -6,4 +6,5 @@ pub(crate) mod headers {
     pub(crate) const CONTENT_TYPE: &str = "Content-Type";
     pub(crate) const IDEMPOTENCY_KEY: &str = "Idempotency-Key";
     pub(crate) const TIMESTAMP: &str = "Timestamp";
+    pub(crate) const X_ACCEPT_VERSION: &str = "X-Accept-Version";
 }
diff --git a/crates/hyperswitch_connectors/src/default_implementations.rs b/crates/hyperswitch_connectors/src/default_implementations.rs
index d8e2e121318..dd3f2152cd8 100644
--- a/crates/hyperswitch_connectors/src/default_implementations.rs
+++ b/crates/hyperswitch_connectors/src/default_implementations.rs
@@ -3,6 +3,7 @@
 // impl api::PaymentsPreProcessing for Helcim {}
 // impl api::PaymentReject for Helcim {}
 // impl api::PaymentApprove for Helcim {}
+use common_utils::errors::CustomResult;
 #[cfg(feature = "frm")]
 use hyperswitch_domain_models::{
     router_flow_types::fraud_check::{Checkout, Fulfillment, RecordReturn, Sale, Transaction},
@@ -55,16 +56,19 @@ use hyperswitch_interfaces::api::payouts::{
     PayoutCancel, PayoutCreate, PayoutEligibility, PayoutFulfill, PayoutQuote, PayoutRecipient,
     PayoutRecipientAccount, PayoutSync,
 };
-use hyperswitch_interfaces::api::{
-    self,
-    disputes::{AcceptDispute, DefendDispute, Dispute, SubmitEvidence},
-    files::{FileUpload, RetrieveFile, UploadFile},
-    payments::{
-        ConnectorCustomer, PaymentApprove, PaymentAuthorizeSessionToken,
-        PaymentIncrementalAuthorization, PaymentReject, PaymentsCompleteAuthorize,
-        PaymentsPostProcessing, PaymentsPreProcessing,
+use hyperswitch_interfaces::{
+    api::{
+        self,
+        disputes::{AcceptDispute, DefendDispute, Dispute, SubmitEvidence},
+        files::{FileUpload, RetrieveFile, UploadFile},
+        payments::{
+            ConnectorCustomer, PaymentApprove, PaymentAuthorizeSessionToken,
+            PaymentIncrementalAuthorization, PaymentReject, PaymentsCompleteAuthorize,
+            PaymentsPostProcessing, PaymentsPreProcessing,
+        },
+        ConnectorIntegration, ConnectorMandateRevoke, ConnectorRedirectResponse,
     },
-    ConnectorIntegration, ConnectorMandateRevoke,
+    errors::ConnectorError,
 };
 
 macro_rules! default_imp_for_authorize_session_token {
@@ -81,7 +85,13 @@ macro_rules! default_imp_for_authorize_session_token {
     };
 }
 
-default_imp_for_authorize_session_token!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_authorize_session_token!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 use crate::connectors;
 macro_rules! default_imp_for_complete_authorize {
@@ -99,7 +109,12 @@ macro_rules! default_imp_for_complete_authorize {
     };
 }
 
-default_imp_for_complete_authorize!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_complete_authorize!(
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 macro_rules! default_imp_for_incremental_authorization {
     ($($path:ident::$connector:ident),*) => {
@@ -116,7 +131,13 @@ macro_rules! default_imp_for_incremental_authorization {
     };
 }
 
-default_imp_for_incremental_authorization!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_incremental_authorization!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 macro_rules! default_imp_for_create_customer {
     ($($path:ident::$connector:ident),*) => {
@@ -133,7 +154,36 @@ macro_rules! default_imp_for_create_customer {
     };
 }
 
-default_imp_for_create_customer!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_create_customer!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim
+);
+
+macro_rules! default_imp_for_connector_redirect_response {
+    ($($path:ident::$connector:ident),*) => {
+        $(
+            impl ConnectorRedirectResponse for $path::$connector {
+                fn get_flow_type(
+                    &self,
+                    _query_params: &str,
+                    _json_payload: Option<serde_json::Value>,
+                    _action: common_enums::enums::PaymentAction
+                ) -> CustomResult<common_enums::enums::CallConnectorAction, ConnectorError> {
+                    Ok(common_enums::enums::CallConnectorAction::Trigger)
+                }
+            }
+    )*
+    };
+}
+
+default_imp_for_connector_redirect_response!(
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 macro_rules! default_imp_for_pre_processing_steps{
     ($($path:ident::$connector:ident),*)=> {
@@ -150,7 +200,13 @@ macro_rules! default_imp_for_pre_processing_steps{
     };
 }
 
-default_imp_for_pre_processing_steps!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_pre_processing_steps!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 macro_rules! default_imp_for_post_processing_steps{
     ($($path:ident::$connector:ident),*)=> {
@@ -167,7 +223,13 @@ macro_rules! default_imp_for_post_processing_steps{
     };
 }
 
-default_imp_for_post_processing_steps!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_post_processing_steps!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 macro_rules! default_imp_for_approve {
     ($($path:ident::$connector:ident),*) => {
@@ -184,7 +246,13 @@ macro_rules! default_imp_for_approve {
     };
 }
 
-default_imp_for_approve!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_approve!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 macro_rules! default_imp_for_reject {
     ($($path:ident::$connector:ident),*) => {
@@ -201,7 +269,13 @@ macro_rules! default_imp_for_reject {
     };
 }
 
-default_imp_for_reject!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_reject!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 macro_rules! default_imp_for_webhook_source_verification {
     ($($path:ident::$connector:ident),*) => {
@@ -218,7 +292,13 @@ macro_rules! default_imp_for_webhook_source_verification {
     };
 }
 
-default_imp_for_webhook_source_verification!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_webhook_source_verification!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 macro_rules! default_imp_for_accept_dispute {
     ($($path:ident::$connector:ident),*) => {
@@ -236,7 +316,13 @@ macro_rules! default_imp_for_accept_dispute {
     };
 }
 
-default_imp_for_accept_dispute!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_accept_dispute!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 macro_rules! default_imp_for_submit_evidence {
     ($($path:ident::$connector:ident),*) => {
@@ -253,7 +339,13 @@ macro_rules! default_imp_for_submit_evidence {
     };
 }
 
-default_imp_for_submit_evidence!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_submit_evidence!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 macro_rules! default_imp_for_defend_dispute {
     ($($path:ident::$connector:ident),*) => {
@@ -270,7 +362,13 @@ macro_rules! default_imp_for_defend_dispute {
     };
 }
 
-default_imp_for_defend_dispute!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_defend_dispute!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 macro_rules! default_imp_for_file_upload {
     ($($path:ident::$connector:ident),*) => {
@@ -296,7 +394,13 @@ macro_rules! default_imp_for_file_upload {
     };
 }
 
-default_imp_for_file_upload!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_file_upload!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 #[cfg(feature = "payouts")]
 macro_rules! default_imp_for_payouts_create {
@@ -315,7 +419,13 @@ macro_rules! default_imp_for_payouts_create {
 }
 
 #[cfg(feature = "payouts")]
-default_imp_for_payouts_create!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_payouts_create!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 #[cfg(feature = "payouts")]
 macro_rules! default_imp_for_payouts_retrieve {
@@ -334,7 +444,13 @@ macro_rules! default_imp_for_payouts_retrieve {
 }
 
 #[cfg(feature = "payouts")]
-default_imp_for_payouts_retrieve!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_payouts_retrieve!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 #[cfg(feature = "payouts")]
 macro_rules! default_imp_for_payouts_eligibility {
@@ -353,7 +469,13 @@ macro_rules! default_imp_for_payouts_eligibility {
 }
 
 #[cfg(feature = "payouts")]
-default_imp_for_payouts_eligibility!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_payouts_eligibility!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 #[cfg(feature = "payouts")]
 macro_rules! default_imp_for_payouts_fulfill {
@@ -372,7 +494,13 @@ macro_rules! default_imp_for_payouts_fulfill {
 }
 
 #[cfg(feature = "payouts")]
-default_imp_for_payouts_fulfill!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_payouts_fulfill!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 #[cfg(feature = "payouts")]
 macro_rules! default_imp_for_payouts_cancel {
@@ -391,7 +519,13 @@ macro_rules! default_imp_for_payouts_cancel {
 }
 
 #[cfg(feature = "payouts")]
-default_imp_for_payouts_cancel!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_payouts_cancel!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 #[cfg(feature = "payouts")]
 macro_rules! default_imp_for_payouts_quote {
@@ -410,7 +544,13 @@ macro_rules! default_imp_for_payouts_quote {
 }
 
 #[cfg(feature = "payouts")]
-default_imp_for_payouts_quote!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_payouts_quote!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 #[cfg(feature = "payouts")]
 macro_rules! default_imp_for_payouts_recipient {
@@ -429,7 +569,13 @@ macro_rules! default_imp_for_payouts_recipient {
 }
 
 #[cfg(feature = "payouts")]
-default_imp_for_payouts_recipient!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_payouts_recipient!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 #[cfg(feature = "payouts")]
 macro_rules! default_imp_for_payouts_recipient_account {
@@ -448,7 +594,13 @@ macro_rules! default_imp_for_payouts_recipient_account {
 }
 
 #[cfg(feature = "payouts")]
-default_imp_for_payouts_recipient_account!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_payouts_recipient_account!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 #[cfg(feature = "frm")]
 macro_rules! default_imp_for_frm_sale {
@@ -467,7 +619,13 @@ macro_rules! default_imp_for_frm_sale {
 }
 
 #[cfg(feature = "frm")]
-default_imp_for_frm_sale!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_frm_sale!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 #[cfg(feature = "frm")]
 macro_rules! default_imp_for_frm_checkout {
@@ -486,7 +644,13 @@ macro_rules! default_imp_for_frm_checkout {
 }
 
 #[cfg(feature = "frm")]
-default_imp_for_frm_checkout!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_frm_checkout!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 #[cfg(feature = "frm")]
 macro_rules! default_imp_for_frm_transaction {
@@ -505,7 +669,13 @@ macro_rules! default_imp_for_frm_transaction {
 }
 
 #[cfg(feature = "frm")]
-default_imp_for_frm_transaction!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_frm_transaction!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 #[cfg(feature = "frm")]
 macro_rules! default_imp_for_frm_fulfillment {
@@ -524,7 +694,13 @@ macro_rules! default_imp_for_frm_fulfillment {
 }
 
 #[cfg(feature = "frm")]
-default_imp_for_frm_fulfillment!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_frm_fulfillment!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 #[cfg(feature = "frm")]
 macro_rules! default_imp_for_frm_record_return {
@@ -543,7 +719,13 @@ macro_rules! default_imp_for_frm_record_return {
 }
 
 #[cfg(feature = "frm")]
-default_imp_for_frm_record_return!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_frm_record_return!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 macro_rules! default_imp_for_revoking_mandates {
     ($($path:ident::$connector:ident),*) => {
@@ -559,4 +741,10 @@ macro_rules! default_imp_for_revoking_mandates {
     };
 }
 
-default_imp_for_revoking_mandates!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_revoking_mandates!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
diff --git a/crates/hyperswitch_connectors/src/default_implementations_v2.rs b/crates/hyperswitch_connectors/src/default_implementations_v2.rs
index f420447fd74..050c8687d89 100644
--- a/crates/hyperswitch_connectors/src/default_implementations_v2.rs
+++ b/crates/hyperswitch_connectors/src/default_implementations_v2.rs
@@ -180,7 +180,13 @@ macro_rules! default_imp_for_new_connector_integration_payment {
     };
 }
 
-default_imp_for_new_connector_integration_payment!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_new_connector_integration_payment!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 macro_rules! default_imp_for_new_connector_integration_refund {
     ($($path:ident::$connector:ident),*) => {
@@ -198,7 +204,13 @@ macro_rules! default_imp_for_new_connector_integration_refund {
     };
 }
 
-default_imp_for_new_connector_integration_refund!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_new_connector_integration_refund!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 macro_rules! default_imp_for_new_connector_integration_connector_access_token {
     ($($path:ident::$connector:ident),*) => {
@@ -212,8 +224,11 @@ macro_rules! default_imp_for_new_connector_integration_connector_access_token {
 }
 
 default_imp_for_new_connector_integration_connector_access_token!(
+    connectors::Bambora,
+    connectors::Bitpay,
     connectors::Fiserv,
-    connectors::Helcim
+    connectors::Helcim,
+    connectors::Stax
 );
 
 macro_rules! default_imp_for_new_connector_integration_accept_dispute {
@@ -233,7 +248,13 @@ macro_rules! default_imp_for_new_connector_integration_accept_dispute {
     };
 }
 
-default_imp_for_new_connector_integration_accept_dispute!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_new_connector_integration_accept_dispute!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 macro_rules! default_imp_for_new_connector_integration_submit_evidence {
     ($($path:ident::$connector:ident),*) => {
@@ -251,7 +272,13 @@ macro_rules! default_imp_for_new_connector_integration_submit_evidence {
     };
 }
 
-default_imp_for_new_connector_integration_submit_evidence!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_new_connector_integration_submit_evidence!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 macro_rules! default_imp_for_new_connector_integration_defend_dispute {
     ($($path:ident::$connector:ident),*) => {
@@ -269,7 +296,13 @@ macro_rules! default_imp_for_new_connector_integration_defend_dispute {
     };
 }
 
-default_imp_for_new_connector_integration_defend_dispute!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_new_connector_integration_defend_dispute!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 macro_rules! default_imp_for_new_connector_integration_file_upload {
     ($($path:ident::$connector:ident),*) => {
@@ -297,7 +330,13 @@ macro_rules! default_imp_for_new_connector_integration_file_upload {
     };
 }
 
-default_imp_for_new_connector_integration_file_upload!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_new_connector_integration_file_upload!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 #[cfg(feature = "payouts")]
 macro_rules! default_imp_for_new_connector_integration_payouts_create {
@@ -317,7 +356,13 @@ macro_rules! default_imp_for_new_connector_integration_payouts_create {
 }
 
 #[cfg(feature = "payouts")]
-default_imp_for_new_connector_integration_payouts_create!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_new_connector_integration_payouts_create!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 #[cfg(feature = "payouts")]
 macro_rules! default_imp_for_new_connector_integration_payouts_eligibility {
@@ -338,8 +383,11 @@ macro_rules! default_imp_for_new_connector_integration_payouts_eligibility {
 
 #[cfg(feature = "payouts")]
 default_imp_for_new_connector_integration_payouts_eligibility!(
+    connectors::Bambora,
+    connectors::Bitpay,
     connectors::Fiserv,
-    connectors::Helcim
+    connectors::Helcim,
+    connectors::Stax
 );
 
 #[cfg(feature = "payouts")]
@@ -360,7 +408,13 @@ macro_rules! default_imp_for_new_connector_integration_payouts_fulfill {
 }
 
 #[cfg(feature = "payouts")]
-default_imp_for_new_connector_integration_payouts_fulfill!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_new_connector_integration_payouts_fulfill!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 #[cfg(feature = "payouts")]
 macro_rules! default_imp_for_new_connector_integration_payouts_cancel {
@@ -380,7 +434,13 @@ macro_rules! default_imp_for_new_connector_integration_payouts_cancel {
 }
 
 #[cfg(feature = "payouts")]
-default_imp_for_new_connector_integration_payouts_cancel!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_new_connector_integration_payouts_cancel!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 #[cfg(feature = "payouts")]
 macro_rules! default_imp_for_new_connector_integration_payouts_quote {
@@ -400,7 +460,13 @@ macro_rules! default_imp_for_new_connector_integration_payouts_quote {
 }
 
 #[cfg(feature = "payouts")]
-default_imp_for_new_connector_integration_payouts_quote!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_new_connector_integration_payouts_quote!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 #[cfg(feature = "payouts")]
 macro_rules! default_imp_for_new_connector_integration_payouts_recipient {
@@ -421,8 +487,11 @@ macro_rules! default_imp_for_new_connector_integration_payouts_recipient {
 
 #[cfg(feature = "payouts")]
 default_imp_for_new_connector_integration_payouts_recipient!(
+    connectors::Bambora,
+    connectors::Bitpay,
     connectors::Fiserv,
-    connectors::Helcim
+    connectors::Helcim,
+    connectors::Stax
 );
 
 #[cfg(feature = "payouts")]
@@ -443,7 +512,13 @@ macro_rules! default_imp_for_new_connector_integration_payouts_sync {
 }
 
 #[cfg(feature = "payouts")]
-default_imp_for_new_connector_integration_payouts_sync!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_new_connector_integration_payouts_sync!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 #[cfg(feature = "payouts")]
 macro_rules! default_imp_for_new_connector_integration_payouts_recipient_account {
@@ -464,8 +539,11 @@ macro_rules! default_imp_for_new_connector_integration_payouts_recipient_account
 
 #[cfg(feature = "payouts")]
 default_imp_for_new_connector_integration_payouts_recipient_account!(
+    connectors::Bambora,
+    connectors::Bitpay,
     connectors::Fiserv,
-    connectors::Helcim
+    connectors::Helcim,
+    connectors::Stax
 );
 
 macro_rules! default_imp_for_new_connector_integration_webhook_source_verification {
@@ -485,8 +563,11 @@ macro_rules! default_imp_for_new_connector_integration_webhook_source_verificati
 }
 
 default_imp_for_new_connector_integration_webhook_source_verification!(
+    connectors::Bambora,
+    connectors::Bitpay,
     connectors::Fiserv,
-    connectors::Helcim
+    connectors::Helcim,
+    connectors::Stax
 );
 
 #[cfg(feature = "frm")]
@@ -507,7 +588,13 @@ macro_rules! default_imp_for_new_connector_integration_frm_sale {
 }
 
 #[cfg(feature = "frm")]
-default_imp_for_new_connector_integration_frm_sale!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_new_connector_integration_frm_sale!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 #[cfg(feature = "frm")]
 macro_rules! default_imp_for_new_connector_integration_frm_checkout {
@@ -527,7 +614,13 @@ macro_rules! default_imp_for_new_connector_integration_frm_checkout {
 }
 
 #[cfg(feature = "frm")]
-default_imp_for_new_connector_integration_frm_checkout!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_new_connector_integration_frm_checkout!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 #[cfg(feature = "frm")]
 macro_rules! default_imp_for_new_connector_integration_frm_transaction {
@@ -547,7 +640,13 @@ macro_rules! default_imp_for_new_connector_integration_frm_transaction {
 }
 
 #[cfg(feature = "frm")]
-default_imp_for_new_connector_integration_frm_transaction!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_new_connector_integration_frm_transaction!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 #[cfg(feature = "frm")]
 macro_rules! default_imp_for_new_connector_integration_frm_fulfillment {
@@ -567,7 +666,13 @@ macro_rules! default_imp_for_new_connector_integration_frm_fulfillment {
 }
 
 #[cfg(feature = "frm")]
-default_imp_for_new_connector_integration_frm_fulfillment!(connectors::Fiserv, connectors::Helcim);
+default_imp_for_new_connector_integration_frm_fulfillment!(
+    connectors::Bambora,
+    connectors::Bitpay,
+    connectors::Fiserv,
+    connectors::Helcim,
+    connectors::Stax
+);
 
 #[cfg(feature = "frm")]
 macro_rules! default_imp_for_new_connector_integration_frm_record_return {
@@ -588,8 +693,11 @@ macro_rules! default_imp_for_new_connector_integration_frm_record_return {
 
 #[cfg(feature = "frm")]
 default_imp_for_new_connector_integration_frm_record_return!(
+    connectors::Bambora,
+    connectors::Bitpay,
     connectors::Fiserv,
-    connectors::Helcim
+    connectors::Helcim,
+    connectors::Stax
 );
 
 macro_rules! default_imp_for_new_connector_integration_revoking_mandates {
@@ -608,6 +716,9 @@ macro_rules! default_imp_for_new_connector_integration_revoking_mandates {
 }
 
 default_imp_for_new_connector_integration_revoking_mandates!(
+    connectors::Bambora,
+    connectors::Bitpay,
     connectors::Fiserv,
-    connectors::Helcim
+    connectors::Helcim,
+    connectors::Stax
 );
diff --git a/crates/hyperswitch_connectors/src/utils.rs b/crates/hyperswitch_connectors/src/utils.rs
index 40f98b6efdb..ebd3ff34704 100644
--- a/crates/hyperswitch_connectors/src/utils.rs
+++ b/crates/hyperswitch_connectors/src/utils.rs
@@ -5,14 +5,16 @@ use common_utils::{
     ext_traits::{OptionExt, ValueExt},
     id_type,
     pii::{self, Email, IpAddress},
+    types::{AmountConvertor, MinorUnit},
 };
 use error_stack::ResultExt;
 use hyperswitch_domain_models::{
     payment_method_data::{Card, PaymentMethodData},
     router_data::{PaymentMethodToken, RecurringMandatePaymentData},
     router_request_types::{
-        AuthenticationData, BrowserInformation, PaymentsAuthorizeData, PaymentsCancelData,
-        PaymentsCaptureData, PaymentsSyncData, RefundsData, ResponseId, SetupMandateRequestData,
+        AuthenticationData, BrowserInformation, CompleteAuthorizeData, PaymentsAuthorizeData,
+        PaymentsCancelData, PaymentsCaptureData, PaymentsSyncData, RefundsData, ResponseId,
+        SetupMandateRequestData,
     },
 };
 use hyperswitch_interfaces::{api, errors};
@@ -131,6 +133,16 @@ where
     json.parse_value(std::any::type_name::<T>()).switch()
 }
 
+pub(crate) fn convert_amount<T>(
+    amount_convertor: &dyn AmountConvertor<Output = T>,
+    amount: MinorUnit,
+    currency: enums::Currency,
+) -> Result<T, error_stack::Report<errors::ConnectorError>> {
+    amount_convertor
+        .convert(amount, currency)
+        .change_context(errors::ConnectorError::AmountConversionFailed)
+}
+
 // TODO: Make all traits as `pub(crate) trait` once all connectors are moved.
 pub trait RouterData {
     fn get_billing(&self) -> Result<&Address, Error>;
@@ -1094,6 +1106,54 @@ impl PaymentsSetupMandateRequestData for SetupMandateRequestData {
     }
 }
 
+pub trait PaymentsCompleteAuthorizeRequestData {
+    fn is_auto_capture(&self) -> Result<bool, Error>;
+    fn get_email(&self) -> Result<Email, Error>;
+    fn get_redirect_response_payload(&self) -> Result<pii::SecretSerdeValue, Error>;
+    fn get_complete_authorize_url(&self) -> Result<String, Error>;
+    fn is_mandate_payment(&self) -> bool;
+}
+
+impl PaymentsCompleteAuthorizeRequestData for CompleteAuthorizeData {
+    fn is_auto_capture(&self) -> Result<bool, Error> {
+        match self.capture_method {
+            Some(enums::CaptureMethod::Automatic) | None => Ok(true),
+            Some(enums::CaptureMethod::Manual) => Ok(false),
+            Some(_) => Err(errors::ConnectorError::CaptureMethodNotSupported.into()),
+        }
+    }
+    fn get_email(&self) -> Result<Email, Error> {
+        self.email.clone().ok_or_else(missing_field_err("email"))
+    }
+    fn get_redirect_response_payload(&self) -> Result<pii::SecretSerdeValue, Error> {
+        self.redirect_response
+            .as_ref()
+            .and_then(|res| res.payload.to_owned())
+            .ok_or(
+                errors::ConnectorError::MissingConnectorRedirectionPayload {
+                    field_name: "request.redirect_response.payload",
+                }
+                .into(),
+            )
+    }
+    fn get_complete_authorize_url(&self) -> Result<String, Error> {
+        self.complete_authorize_url
+            .clone()
+            .ok_or_else(missing_field_err("complete_authorize_url"))
+    }
+    fn is_mandate_payment(&self) -> bool {
+        ((self.customer_acceptance.is_some() || self.setup_mandate_details.is_some())
+            && self.setup_future_usage.map_or(false, |setup_future_usage| {
+                setup_future_usage == FutureUsage::OffSession
+            }))
+            || self
+                .mandate_id
+                .as_ref()
+                .and_then(|mandate_ids| mandate_ids.mandate_reference_id.as_ref())
+                .is_some()
+    }
+}
+
 pub trait BrowserInformationData {
     fn get_accept_header(&self) -> Result<String, Error>;
     fn get_language(&self) -> Result<String, Error>;
@@ -1154,3 +1214,19 @@ impl BrowserInformationData for BrowserInformation {
             .ok_or_else(missing_field_err("browser_info.java_script_enabled"))
     }
 }
+
+#[macro_export]
+macro_rules! unimplemented_payment_method {
+    ($payment_method:expr, $connector:expr) => {
+        errors::ConnectorError::NotImplemented(format!(
+            "{} through {}",
+            $payment_method, $connector
+        ))
+    };
+    ($payment_method:expr, $flow:expr, $connector:expr) => {
+        errors::ConnectorError::NotImplemented(format!(
+            "{} {} through {}",
+            $payment_method, $flow, $connector
+        ))
+    };
+}
diff --git a/crates/hyperswitch_domain_models/src/types.rs b/crates/hyperswitch_domain_models/src/types.rs
index 814d235e6f0..e425fc7fcc6 100644
--- a/crates/hyperswitch_domain_models/src/types.rs
+++ b/crates/hyperswitch_domain_models/src/types.rs
@@ -1,7 +1,11 @@
 use crate::{
     router_data::RouterData,
-    router_flow_types::{Authorize, Capture, PSync, RSync, SetupMandate, Void},
+    router_flow_types::{
+        Authorize, Capture, CompleteAuthorize, CreateConnectorCustomer, PSync, PaymentMethodToken,
+        RSync, SetupMandate, Void,
+    },
     router_request_types::{
+        CompleteAuthorizeData, ConnectorCustomerData, PaymentMethodTokenizationData,
         PaymentsAuthorizeData, PaymentsCancelData, PaymentsCaptureData, PaymentsSyncData,
         RefundsData, SetupMandateRequestData,
     },
@@ -17,3 +21,9 @@ pub type SetupMandateRouterData =
     RouterData<SetupMandate, SetupMandateRequestData, PaymentsResponseData>;
 pub type RefundsRouterData<F> = RouterData<F, RefundsData, RefundsResponseData>;
 pub type RefundSyncRouterData = RouterData<RSync, RefundsData, RefundsResponseData>;
+pub type TokenizationRouterData =
+    RouterData<PaymentMethodToken, PaymentMethodTokenizationData, PaymentsResponseData>;
+pub type ConnectorCustomerRouterData =
+    RouterData<CreateConnectorCustomer, ConnectorCustomerData, PaymentsResponseData>;
+pub type PaymentsCompleteAuthorizeRouterData =
+    RouterData<CompleteAuthorize, CompleteAuthorizeData, PaymentsResponseData>;
diff --git a/crates/hyperswitch_interfaces/src/api.rs b/crates/hyperswitch_interfaces/src/api.rs
index 82ae0d141d7..0b4545a33d7 100644
--- a/crates/hyperswitch_interfaces/src/api.rs
+++ b/crates/hyperswitch_interfaces/src/api.rs
@@ -17,7 +17,7 @@ pub mod payouts_v2;
 pub mod refunds;
 pub mod refunds_v2;
 
-use common_enums::enums::{CaptureMethod, PaymentMethodType};
+use common_enums::enums::{CallConnectorAction, CaptureMethod, PaymentAction, PaymentMethodType};
 use common_utils::{
     errors::CustomResult,
     request::{Method, Request, RequestContent},
@@ -398,3 +398,16 @@ pub trait ConnectorValidation: ConnectorCommon {
         false
     }
 }
+
+/// trait ConnectorRedirectResponse
+pub trait ConnectorRedirectResponse {
+    /// fn get_flow_type
+    fn get_flow_type(
+        &self,
+        _query_params: &str,
+        _json_payload: Option<serde_json::Value>,
+        _action: PaymentAction,
+    ) -> CustomResult<CallConnectorAction, errors::ConnectorError> {
+        Ok(CallConnectorAction::Avoid)
+    }
+}
diff --git a/crates/router/src/connector.rs b/crates/router/src/connector.rs
index a421c931203..7d5fc28e2ba 100644
--- a/crates/router/src/connector.rs
+++ b/crates/router/src/connector.rs
@@ -3,11 +3,9 @@ pub mod adyen;
 pub mod adyenplatform;
 pub mod airwallex;
 pub mod authorizedotnet;
-pub mod bambora;
 pub mod bamboraapac;
 pub mod bankofamerica;
 pub mod billwerk;
-pub mod bitpay;
 pub mod bluesnap;
 pub mod boku;
 pub mod braintree;
@@ -54,7 +52,6 @@ pub mod riskified;
 pub mod shift4;
 pub mod signifyd;
 pub mod square;
-pub mod stax;
 pub mod stripe;
 pub mod threedsecureio;
 pub mod trustpay;
@@ -68,24 +65,26 @@ pub mod worldpay;
 pub mod zen;
 pub mod zsl;
 
-pub use hyperswitch_connectors::connectors::{fiserv, fiserv::Fiserv, helcim, helcim::Helcim};
+pub use hyperswitch_connectors::connectors::{
+    bambora, bambora::Bambora, bitpay, bitpay::Bitpay, fiserv, fiserv::Fiserv, helcim,
+    helcim::Helcim, stax, stax::Stax,
+};
 
 #[cfg(feature = "dummy_connector")]
 pub use self::dummyconnector::DummyConnector;
 pub use self::{
     aci::Aci, adyen::Adyen, adyenplatform::Adyenplatform, airwallex::Airwallex,
-    authorizedotnet::Authorizedotnet, bambora::Bambora, bamboraapac::Bamboraapac,
-    bankofamerica::Bankofamerica, billwerk::Billwerk, bitpay::Bitpay, bluesnap::Bluesnap,
-    boku::Boku, braintree::Braintree, cashtocode::Cashtocode, checkout::Checkout,
-    coinbase::Coinbase, cryptopay::Cryptopay, cybersource::Cybersource, datatrans::Datatrans,
-    dlocal::Dlocal, ebanx::Ebanx, forte::Forte, globalpay::Globalpay, globepay::Globepay,
-    gocardless::Gocardless, gpayments::Gpayments, iatapay::Iatapay, itaubank::Itaubank,
-    klarna::Klarna, mifinity::Mifinity, mollie::Mollie, multisafepay::Multisafepay,
-    netcetera::Netcetera, nexinets::Nexinets, nmi::Nmi, noon::Noon, nuvei::Nuvei, opayo::Opayo,
-    opennode::Opennode, payeezy::Payeezy, payme::Payme, payone::Payone, paypal::Paypal, payu::Payu,
-    placetopay::Placetopay, plaid::Plaid, powertranz::Powertranz, prophetpay::Prophetpay,
-    rapyd::Rapyd, razorpay::Razorpay, riskified::Riskified, shift4::Shift4, signifyd::Signifyd,
-    square::Square, stax::Stax, stripe::Stripe, threedsecureio::Threedsecureio, trustpay::Trustpay,
-    tsys::Tsys, volt::Volt, wellsfargo::Wellsfargo, wise::Wise, worldline::Worldline,
-    worldpay::Worldpay, zen::Zen, zsl::Zsl,
+    authorizedotnet::Authorizedotnet, bamboraapac::Bamboraapac, bankofamerica::Bankofamerica,
+    billwerk::Billwerk, bluesnap::Bluesnap, boku::Boku, braintree::Braintree,
+    cashtocode::Cashtocode, checkout::Checkout, coinbase::Coinbase, cryptopay::Cryptopay,
+    cybersource::Cybersource, datatrans::Datatrans, dlocal::Dlocal, ebanx::Ebanx, forte::Forte,
+    globalpay::Globalpay, globepay::Globepay, gocardless::Gocardless, gpayments::Gpayments,
+    iatapay::Iatapay, itaubank::Itaubank, klarna::Klarna, mifinity::Mifinity, mollie::Mollie,
+    multisafepay::Multisafepay, netcetera::Netcetera, nexinets::Nexinets, nmi::Nmi, noon::Noon,
+    nuvei::Nuvei, opayo::Opayo, opennode::Opennode, payeezy::Payeezy, payme::Payme, payone::Payone,
+    paypal::Paypal, payu::Payu, placetopay::Placetopay, plaid::Plaid, powertranz::Powertranz,
+    prophetpay::Prophetpay, rapyd::Rapyd, razorpay::Razorpay, riskified::Riskified, shift4::Shift4,
+    signifyd::Signifyd, square::Square, stripe::Stripe, threedsecureio::Threedsecureio,
+    trustpay::Trustpay, tsys::Tsys, volt::Volt, wellsfargo::Wellsfargo, wise::Wise,
+    worldline::Worldline, worldpay::Worldpay, zen::Zen, zsl::Zsl,
 };
diff --git a/crates/router/src/core/payments.rs b/crates/router/src/core/payments.rs
index 003c9561094..a165264117a 100644
--- a/crates/router/src/core/payments.rs
+++ b/crates/router/src/core/payments.rs
@@ -25,6 +25,7 @@ use api_models::{
     mandates::RecurringDetails,
     payments::{self as payments_api, HeaderPayload},
 };
+pub use common_enums::enums::CallConnectorAction;
 use common_utils::{
     ext_traits::{AsyncExt, StringExt},
     id_type, pii,
@@ -2661,18 +2662,6 @@ where
     Ok(payment_data.to_owned())
 }
 
-#[derive(Clone, PartialEq)]
-pub enum CallConnectorAction {
-    Trigger,
-    Avoid,
-    StatusUpdate {
-        status: storage_enums::AttemptStatus,
-        error_code: Option<String>,
-        error_message: Option<String>,
-    },
-    HandleResponse(Vec<u8>),
-}
-
 #[derive(Clone)]
 pub struct MandateConnectorDetails {
     pub connector: String,
diff --git a/crates/router/src/core/payments/connector_integration_v2_impls.rs b/crates/router/src/core/payments/connector_integration_v2_impls.rs
index 019020b0b52..4090dc40462 100644
--- a/crates/router/src/core/payments/connector_integration_v2_impls.rs
+++ b/crates/router/src/core/payments/connector_integration_v2_impls.rs
@@ -639,11 +639,9 @@ default_imp_for_new_connector_integration_payment!(
     connector::Adyenplatform,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -686,7 +684,6 @@ default_imp_for_new_connector_integration_payment!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Trustpay,
@@ -724,11 +721,9 @@ default_imp_for_new_connector_integration_refund!(
     connector::Adyenplatform,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -771,7 +766,6 @@ default_imp_for_new_connector_integration_refund!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Trustpay,
@@ -804,11 +798,9 @@ default_imp_for_new_connector_integration_connector_access_token!(
     connector::Adyenplatform,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -851,7 +843,6 @@ default_imp_for_new_connector_integration_connector_access_token!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Trustpay,
@@ -906,11 +897,9 @@ default_imp_for_new_connector_integration_accept_dispute!(
     connector::Adyenplatform,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -953,7 +942,6 @@ default_imp_for_new_connector_integration_accept_dispute!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Trustpay,
@@ -990,11 +978,9 @@ default_imp_for_new_connector_integration_defend_dispute!(
     connector::Adyenplatform,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -1037,7 +1023,6 @@ default_imp_for_new_connector_integration_defend_dispute!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Trustpay,
@@ -1058,11 +1043,9 @@ default_imp_for_new_connector_integration_submit_evidence!(
     connector::Adyenplatform,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -1105,7 +1088,6 @@ default_imp_for_new_connector_integration_submit_evidence!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Trustpay,
@@ -1153,11 +1135,9 @@ default_imp_for_new_connector_integration_file_upload!(
     connector::Adyenplatform,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -1200,7 +1180,6 @@ default_imp_for_new_connector_integration_file_upload!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Trustpay,
@@ -1319,11 +1298,9 @@ default_imp_for_new_connector_integration_payouts_create!(
     connector::Adyenplatform,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -1366,7 +1343,6 @@ default_imp_for_new_connector_integration_payouts_create!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Trustpay,
@@ -1406,11 +1382,9 @@ default_imp_for_new_connector_integration_payouts_eligibility!(
     connector::Adyenplatform,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -1453,7 +1427,6 @@ default_imp_for_new_connector_integration_payouts_eligibility!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Trustpay,
@@ -1493,11 +1466,9 @@ default_imp_for_new_connector_integration_payouts_fulfill!(
     connector::Adyenplatform,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -1540,7 +1511,6 @@ default_imp_for_new_connector_integration_payouts_fulfill!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Trustpay,
@@ -1580,11 +1550,9 @@ default_imp_for_new_connector_integration_payouts_cancel!(
     connector::Adyenplatform,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -1627,7 +1595,6 @@ default_imp_for_new_connector_integration_payouts_cancel!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Trustpay,
@@ -1667,11 +1634,9 @@ default_imp_for_new_connector_integration_payouts_quote!(
     connector::Adyenplatform,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -1714,7 +1679,6 @@ default_imp_for_new_connector_integration_payouts_quote!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Trustpay,
@@ -1754,11 +1718,9 @@ default_imp_for_new_connector_integration_payouts_recipient!(
     connector::Adyenplatform,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -1801,7 +1763,6 @@ default_imp_for_new_connector_integration_payouts_recipient!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Trustpay,
@@ -1841,11 +1802,9 @@ default_imp_for_new_connector_integration_payouts_sync!(
     connector::Adyen,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -1889,7 +1848,6 @@ default_imp_for_new_connector_integration_payouts_sync!(
     connector::Signifyd,
     connector::Stripe,
     connector::Square,
-    connector::Stax,
     connector::Shift4,
     connector::Threedsecureio,
     connector::Trustpay,
@@ -1928,11 +1886,9 @@ default_imp_for_new_connector_integration_payouts_recipient_account!(
     connector::Adyenplatform,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -1975,7 +1931,6 @@ default_imp_for_new_connector_integration_payouts_recipient_account!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Trustpay,
@@ -2013,11 +1968,9 @@ default_imp_for_new_connector_integration_webhook_source_verification!(
     connector::Adyenplatform,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -2060,7 +2013,6 @@ default_imp_for_new_connector_integration_webhook_source_verification!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Trustpay,
@@ -2179,11 +2131,9 @@ default_imp_for_new_connector_integration_frm_sale!(
     connector::Adyenplatform,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -2226,7 +2176,6 @@ default_imp_for_new_connector_integration_frm_sale!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Trustpay,
@@ -2266,11 +2215,9 @@ default_imp_for_new_connector_integration_frm_checkout!(
     connector::Adyenplatform,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -2313,7 +2260,6 @@ default_imp_for_new_connector_integration_frm_checkout!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Trustpay,
@@ -2353,11 +2299,9 @@ default_imp_for_new_connector_integration_frm_transaction!(
     connector::Adyenplatform,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -2400,7 +2344,6 @@ default_imp_for_new_connector_integration_frm_transaction!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Trustpay,
@@ -2440,11 +2383,9 @@ default_imp_for_new_connector_integration_frm_fulfillment!(
     connector::Adyenplatform,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -2487,7 +2428,6 @@ default_imp_for_new_connector_integration_frm_fulfillment!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Trustpay,
@@ -2527,11 +2467,9 @@ default_imp_for_new_connector_integration_frm_record_return!(
     connector::Adyenplatform,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -2574,7 +2512,6 @@ default_imp_for_new_connector_integration_frm_record_return!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Trustpay,
@@ -2611,11 +2548,9 @@ default_imp_for_new_connector_integration_revoking_mandates!(
     connector::Adyenplatform,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -2658,7 +2593,6 @@ default_imp_for_new_connector_integration_revoking_mandates!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Trustpay,
diff --git a/crates/router/src/core/payments/flows.rs b/crates/router/src/core/payments/flows.rs
index 6756b9ff5dc..af56c7e4ba6 100644
--- a/crates/router/src/core/payments/flows.rs
+++ b/crates/router/src/core/payments/flows.rs
@@ -192,7 +192,6 @@ default_imp_for_complete_authorize!(
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Boku,
     connector::Cashtocode,
     connector::Checkout,
@@ -225,7 +224,6 @@ default_imp_for_complete_authorize!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Threedsecureio,
     connector::Trustpay,
@@ -270,11 +268,9 @@ default_imp_for_webhook_source_verification!(
     connector::Adyen,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Braintree,
     connector::Boku,
@@ -318,7 +314,6 @@ default_imp_for_webhook_source_verification!(
     connector::Shift4,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Threedsecureio,
     connector::Trustpay,
@@ -365,11 +360,9 @@ default_imp_for_create_customer!(
     connector::Adyen,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -459,7 +452,6 @@ default_imp_for_connector_redirect_response!(
     connector::Aci,
     connector::Adyen,
     connector::Bamboraapac,
-    connector::Bitpay,
     connector::Bankofamerica,
     connector::Billwerk,
     connector::Boku,
@@ -470,12 +462,10 @@ default_imp_for_connector_redirect_response!(
     connector::Datatrans,
     connector::Dlocal,
     connector::Ebanx,
-    connector::Fiserv,
     connector::Forte,
     connector::Globepay,
     connector::Gocardless,
     connector::Gpayments,
-    connector::Helcim,
     connector::Iatapay,
     connector::Itaubank,
     connector::Klarna,
@@ -498,7 +488,6 @@ default_imp_for_connector_redirect_response!(
     connector::Shift4,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Threedsecureio,
     connector::Tsys,
     connector::Volt,
@@ -625,11 +614,9 @@ default_imp_for_accept_dispute!(
     connector::Adyen,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -673,7 +660,6 @@ default_imp_for_accept_dispute!(
     connector::Shift4,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Threedsecureio,
     connector::Trustpay,
@@ -742,11 +728,9 @@ default_imp_for_file_upload!(
     connector::Adyen,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -789,7 +773,6 @@ default_imp_for_file_upload!(
     connector::Shift4,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Threedsecureio,
     connector::Trustpay,
     connector::Tsys,
@@ -836,11 +819,9 @@ default_imp_for_submit_evidence!(
     connector::Adyen,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -883,7 +864,6 @@ default_imp_for_submit_evidence!(
     connector::Shift4,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Threedsecureio,
     connector::Trustpay,
     connector::Tsys,
@@ -930,11 +910,9 @@ default_imp_for_defend_dispute!(
     connector::Adyen,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -977,7 +955,6 @@ default_imp_for_defend_dispute!(
     connector::Shift4,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Threedsecureio,
     connector::Trustpay,
@@ -1038,11 +1015,9 @@ default_imp_for_pre_processing_steps!(
     connector::Adyenplatform,
     connector::Aci,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -1080,7 +1055,6 @@ default_imp_for_pre_processing_steps!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Threedsecureio,
     connector::Tsys,
     connector::Volt,
@@ -1120,10 +1094,8 @@ default_imp_for_post_processing_steps!(
     connector::Trustpay,
     connector::Aci,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -1159,7 +1131,6 @@ default_imp_for_post_processing_steps!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Threedsecureio,
     connector::Tsys,
     connector::Volt,
@@ -1279,11 +1250,9 @@ default_imp_for_payouts_create!(
     connector::Aci,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -1325,7 +1294,6 @@ default_imp_for_payouts_create!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Shift4,
     connector::Threedsecureio,
     connector::Trustpay,
@@ -1372,11 +1340,9 @@ default_imp_for_payouts_retrieve!(
     connector::Adyen,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -1420,7 +1386,6 @@ default_imp_for_payouts_retrieve!(
     connector::Signifyd,
     connector::Stripe,
     connector::Square,
-    connector::Stax,
     connector::Shift4,
     connector::Threedsecureio,
     connector::Trustpay,
@@ -1470,11 +1435,9 @@ default_imp_for_payouts_eligibility!(
     connector::Aci,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -1517,7 +1480,6 @@ default_imp_for_payouts_eligibility!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Threedsecureio,
@@ -1563,11 +1525,9 @@ default_imp_for_payouts_fulfill!(
     connector::Aci,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -1607,7 +1567,6 @@ default_imp_for_payouts_fulfill!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Shift4,
     connector::Threedsecureio,
     connector::Trustpay,
@@ -1653,11 +1612,9 @@ default_imp_for_payouts_cancel!(
     connector::Aci,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -1700,7 +1657,6 @@ default_imp_for_payouts_cancel!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Shift4,
     connector::Threedsecureio,
     connector::Trustpay,
@@ -1747,11 +1703,9 @@ default_imp_for_payouts_quote!(
     connector::Adyen,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -1794,7 +1748,6 @@ default_imp_for_payouts_quote!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Threedsecureio,
@@ -1842,11 +1795,9 @@ default_imp_for_payouts_recipient!(
     connector::Adyen,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -1889,7 +1840,6 @@ default_imp_for_payouts_recipient!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Shift4,
     connector::Threedsecureio,
     connector::Trustpay,
@@ -1939,11 +1889,9 @@ default_imp_for_payouts_recipient_account!(
     connector::Adyen,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -1987,7 +1935,6 @@ default_imp_for_payouts_recipient_account!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Shift4,
     connector::Threedsecureio,
     connector::Trustpay,
@@ -2034,11 +1981,9 @@ default_imp_for_approve!(
     connector::Adyen,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -2082,7 +2027,6 @@ default_imp_for_approve!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Threedsecureio,
@@ -2130,11 +2074,9 @@ default_imp_for_reject!(
     connector::Adyen,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -2178,7 +2120,6 @@ default_imp_for_reject!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Threedsecureio,
@@ -2308,11 +2249,9 @@ default_imp_for_frm_sale!(
     connector::Adyen,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -2354,7 +2293,6 @@ default_imp_for_frm_sale!(
     connector::Rapyd,
     connector::Razorpay,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Threedsecureio,
@@ -2404,11 +2342,9 @@ default_imp_for_frm_checkout!(
     connector::Adyen,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -2450,7 +2386,6 @@ default_imp_for_frm_checkout!(
     connector::Rapyd,
     connector::Razorpay,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Threedsecureio,
@@ -2500,11 +2435,9 @@ default_imp_for_frm_transaction!(
     connector::Adyen,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -2546,7 +2479,6 @@ default_imp_for_frm_transaction!(
     connector::Rapyd,
     connector::Razorpay,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Threedsecureio,
@@ -2596,11 +2528,9 @@ default_imp_for_frm_fulfillment!(
     connector::Adyen,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -2642,7 +2572,6 @@ default_imp_for_frm_fulfillment!(
     connector::Rapyd,
     connector::Razorpay,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Threedsecureio,
@@ -2692,11 +2621,9 @@ default_imp_for_frm_record_return!(
     connector::Adyen,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -2738,7 +2665,6 @@ default_imp_for_frm_record_return!(
     connector::Rapyd,
     connector::Razorpay,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Threedsecureio,
@@ -2786,11 +2712,9 @@ default_imp_for_incremental_authorization!(
     connector::Adyen,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -2833,7 +2757,6 @@ default_imp_for_incremental_authorization!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Threedsecureio,
@@ -2879,11 +2802,9 @@ default_imp_for_revoking_mandates!(
     connector::Adyen,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -2925,7 +2846,6 @@ default_imp_for_revoking_mandates!(
     connector::Riskified,
     connector::Signifyd,
     connector::Square,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Threedsecureio,
@@ -3124,11 +3044,9 @@ default_imp_for_authorize_session_token!(
     connector::Adyenplatform,
     connector::Airwallex,
     connector::Authorizedotnet,
-    connector::Bambora,
     connector::Bamboraapac,
     connector::Bankofamerica,
     connector::Billwerk,
-    connector::Bitpay,
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
@@ -3170,7 +3088,6 @@ default_imp_for_authorize_session_token!(
     connector::Razorpay,
     connector::Riskified,
     connector::Signifyd,
-    connector::Stax,
     connector::Stripe,
     connector::Shift4,
     connector::Threedsecureio,
diff --git a/crates/router/src/services/api.rs b/crates/router/src/services/api.rs
index 795d6dd9eff..322478da295 100644
--- a/crates/router/src/services/api.rs
+++ b/crates/router/src/services/api.rs
@@ -18,6 +18,7 @@ use actix_web::{
     web, FromRequest, HttpRequest, HttpResponse, Responder, ResponseError,
 };
 pub use client::{proxy_bypass_urls, ApiClient, MockApiClient, ProxyClient};
+pub use common_enums::enums::PaymentAction;
 pub use common_utils::request::{ContentType, Method, Request, RequestBuilder};
 use common_utils::{
     consts::{DEFAULT_TENANT, TENANT_HEADER, X_HS_LATENCY},
@@ -37,7 +38,7 @@ pub use hyperswitch_domain_models::{
 pub use hyperswitch_interfaces::{
     api::{
         BoxedConnectorIntegration, CaptureSyncMethod, ConnectorIntegration,
-        ConnectorIntegrationAny, ConnectorValidation,
+        ConnectorIntegrationAny, ConnectorRedirectResponse, ConnectorValidation,
     },
     connector_integration_v2::{
         BoxedConnectorIntegrationV2, ConnectorIntegrationAnyV2, ConnectorIntegrationV2,
@@ -672,13 +673,6 @@ async fn handle_response(
         .await
 }
 
-#[derive(Debug, Eq, PartialEq)]
-pub enum PaymentAction {
-    PSync,
-    CompleteAuthorize,
-    PaymentAuthenticateCompleteAuthorize,
-}
-
 #[derive(Debug, Eq, PartialEq, Serialize)]
 pub struct ApplicationRedirectResponse {
     pub url: String,
@@ -1219,17 +1213,6 @@ pub fn http_response_err<T: body::MessageBody + 'static>(response: T) -> HttpRes
         .body(response)
 }
 
-pub trait ConnectorRedirectResponse {
-    fn get_flow_type(
-        &self,
-        _query_params: &str,
-        _json_payload: Option<serde_json::Value>,
-        _action: PaymentAction,
-    ) -> CustomResult<payments::CallConnectorAction, errors::ConnectorError> {
-        Ok(payments::CallConnectorAction::Avoid)
-    }
-}
-
 pub trait Authenticate {
     fn get_client_secret(&self) -> Option<&String> {
         None

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

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

## Description
<!-- Describe your changes in detail -->
Move connector code for `bambora, bitpay and stax` from crate `router` to crate `hyperswitch_connectors`.

### 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`
2. `crates/router/src/configs`
3. `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).
-->
https://github.com/juspay/hyperswitch/issues/5451

## 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)?
-->

The following flows need to be tested for connector `Bambora`:

1. Authorize(Auto Capture):

Request:
```
curl --location 'http://localhost:8080/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_cNgJBniCHyPWijpb73YRpH06jVNPFSU8B8oZl9yJCa1tK9wO3kru8HXSeYfvREpD' \
--data '{
    "amount": 2000,
    "currency": "USD",
    "confirm": true,
    "customer_id": "assdre1v",
    "authentication_type": "no_three_ds",
    "payment_method": "card",
    "payment_method_type": "credit",
    "payment_method_data": {
        "card": {
            "card_number": "4030000010001234",
            "card_exp_month": "10",
            "card_exp_year": "24",
            "card_holder_name": "Sundari KK",
            "card_cvc": "123"
        }
    }
}'
```

Response:
```
{
    "payment_id": "pay_9iF0FWAx4IczBe6lfjqN",
    "merchant_id": "merchant_1722320361",
    "status": "succeeded",
    "amount": 2000,
    "net_amount": 2000,
    "amount_capturable": 0,
    "amount_received": 2000,
    "connector": "bambora",
    "client_secret": "pay_9iF0FWAx4IczBe6lfjqN_secret_4AqBHdIhtcaLfUgaASFu",
    "created": "2024-07-30T06:22:16.297Z",
    "currency": "USD",
    "customer_id": "assdre1v",
    "customer": {
        "id": "assdre1v",
        "name": null,
        "email": null,
        "phone": null,
        "phone_country_code": null
    },
    "description": null,
    "refunds": null,
    "disputes": null,
    "mandate_id": null,
    "mandate_data": null,
    "setup_future_usage": null,
    "off_session": null,
    "capture_on": null,
    "capture_method": null,
    "payment_method": "card",
    "payment_method_data": {
        "card": {
            "last4": "1234",
            "card_type": null,
            "card_network": null,
            "card_issuer": null,
            "card_issuing_country": null,
            "card_isin": "403000",
            "card_extended_bin": null,
            "card_exp_month": "10",
            "card_exp_year": "24",
            "card_holder_name": "Sundari KK",
            "payment_checks": null,
            "authentication_data": null
        },
        "billing": null
    },
    "payment_token": null,
    "shipping": null,
    "billing": null,
    "order_details": null,
    "email": null,
    "name": null,
    "phone": null,
    "return_url": null,
    "authentication_type": "no_three_ds",
    "statement_descriptor_name": null,
    "statement_descriptor_suffix": null,
    "next_action": null,
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": "credit",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": {
        "customer_id": "assdre1v",
        "created_at": 1722320536,
        "expires": 1722324136,
        "secret": "epk_54a280472ee5468d9153d58fe3681776"
    },
    "manual_retry_allowed": false,
    "connector_transaction_id": "10005121",
    "frm_message": null,
    "metadata": null,
    "connector_metadata": null,
    "feature_metadata": null,
    "reference_id": "pay_9iF0FWAx4IczBe6lfjqN_1",
    "payment_link": null,
    "profile_id": "pro_sUtV9MeXG0JSXuSGISfQ",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_iMJkO4jVosAfhRagvx0w",
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2024-07-30T06:37:16.297Z",
    "fingerprint": null,
    "browser_info": null,
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2024-07-30T06:22:18.261Z",
    "charges": null,
    "frm_metadata": null,
    "merchant_order_reference_id": null
}
```

2. Authorize(Manual Capture):

Request:
```
curl --location 'http://localhost:8080/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_cNgJBniCHyPWijpb73YRpH06jVNPFSU8B8oZl9yJCa1tK9wO3kru8HXSeYfvREpD' \
--data '{
    "amount": 2000,
    "currency": "USD",
    "confirm": true,
    "customer_id": "assdre1v",
    "capture_method": "manual",
    "authentication_type": "no_three_ds",
    "payment_method": "card",
    "payment_method_type": "credit",
    "payment_method_data": {
        "card": {
            "card_number": "4030000010001234",
            "card_exp_month": "10",
            "card_exp_year": "24",
            "card_holder_name": "Sundari KK",
            "card_cvc": "123"
        }
    }
}'
```

Response:
```
{
    "payment_id": "pay_qFIbwvRbf3PMDPiCrCR6",
    "merchant_id": "merchant_1722320361",
    "status": "requires_capture",
    "amount": 2000,
    "net_amount": 2000,
    "amount_capturable": 2000,
    "amount_received": null,
    "connector": "bambora",
    "client_secret": "pay_qFIbwvRbf3PMDPiCrCR6_secret_95Ls5eHUAZGfw90y0Thr",
    "created": "2024-07-30T06:19:31.883Z",
    "currency": "USD",
    "customer_id": "assdre1v",
    "customer": {
        "id": "assdre1v",
        "name": null,
        "email": null,
        "phone": null,
        "phone_country_code": null
    },
    "description": null,
    "refunds": null,
    "disputes": null,
    "mandate_id": null,
    "mandate_data": null,
    "setup_future_usage": null,
    "off_session": null,
    "capture_on": null,
    "capture_method": "manual",
    "payment_method": "card",
    "payment_method_data": {
        "card": {
            "last4": "1234",
            "card_type": null,
            "card_network": null,
            "card_issuer": null,
            "card_issuing_country": null,
            "card_isin": "403000",
            "card_extended_bin": null,
            "card_exp_month": "10",
            "card_exp_year": "24",
            "card_holder_name": "Sundari KK",
            "payment_checks": null,
            "authentication_data": null
        },
        "billing": null
    },
    "payment_token": null,
    "shipping": null,
    "billing": null,
    "order_details": null,
    "email": null,
    "name": null,
    "phone": null,
    "return_url": null,
    "authentication_type": "no_three_ds",
    "statement_descriptor_name": null,
    "statement_descriptor_suffix": null,
    "next_action": null,
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": "credit",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": {
        "customer_id": "assdre1v",
        "created_at": 1722320371,
        "expires": 1722323971,
        "secret": "epk_ed3c8ac50159491791de640213f46b60"
    },
    "manual_retry_allowed": false,
    "connector_transaction_id": "10005119",
    "frm_message": null,
    "metadata": null,
    "connector_metadata": null,
    "feature_metadata": null,
    "reference_id": "pay_qFIbwvRbf3PMDPiCrCR6_1",
    "payment_link": null,
    "profile_id": "pro_sUtV9MeXG0JSXuSGISfQ",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_iMJkO4jVosAfhRagvx0w",
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2024-07-30T06:34:31.883Z",
    "fingerprint": null,
    "browser_info": null,
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2024-07-30T06:19:34.580Z",
    "charges": null,
    "frm_metadata": null,
    "merchant_order_reference_id": null
}
```

3. Capture: 

Request:
```
curl --location 'http://localhost:8080/payments/pay_qFIbwvRbf3PMDPiCrCR6/capture' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_cNgJBniCHyPWijpb73YRpH06jVNPFSU8B8oZl9yJCa1tK9wO3kru8HXSeYfvREpD' \
--data '{
    "amount_to_capture": 200,
    "statement_descriptor_name": "Joseph",
    "statement_descriptor_suffix": "JS"
}'
```

Response:
```
{
    "payment_id": "pay_qFIbwvRbf3PMDPiCrCR6",
    "merchant_id": "merchant_1722320361",
    "status": "partially_captured",
    "amount": 2000,
    "net_amount": 2000,
    "amount_capturable": 0,
    "amount_received": 200,
    "connector": "bambora",
    "client_secret": "pay_qFIbwvRbf3PMDPiCrCR6_secret_95Ls5eHUAZGfw90y0Thr",
    "created": "2024-07-30T06:19:31.883Z",
    "currency": "USD",
    "customer_id": "assdre1v",
    "customer": {
        "id": "assdre1v",
        "name": null,
        "email": null,
        "phone": null,
        "phone_country_code": null
    },
    "description": null,
    "refunds": null,
    "disputes": null,
    "mandate_id": null,
    "mandate_data": null,
    "setup_future_usage": null,
    "off_session": null,
    "capture_on": null,
    "capture_method": "manual",
    "payment_method": "card",
    "payment_method_data": {
        "card": {
            "last4": "1234",
            "card_type": null,
            "card_network": null,
            "card_issuer": null,
            "card_issuing_country": null,
            "card_isin": "403000",
            "card_extended_bin": null,
            "card_exp_month": "10",
            "card_exp_year": "24",
            "card_holder_name": "Sundari KK",
            "payment_checks": null,
            "authentication_data": null
        },
        "billing": null
    },
    "payment_token": null,
    "shipping": null,
    "billing": null,
    "order_details": null,
    "email": null,
    "name": null,
    "phone": null,
    "return_url": null,
    "authentication_type": "no_three_ds",
    "statement_descriptor_name": null,
    "statement_descriptor_suffix": null,
    "next_action": null,
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": "credit",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": null,
    "manual_retry_allowed": false,
    "connector_transaction_id": "10005120",
    "frm_message": null,
    "metadata": null,
    "connector_metadata": null,
    "feature_metadata": null,
    "reference_id": "pay_qFIbwvRbf3PMDPiCrCR6_1",
    "payment_link": null,
    "profile_id": "pro_sUtV9MeXG0JSXuSGISfQ",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_iMJkO4jVosAfhRagvx0w",
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2024-07-30T06:34:31.883Z",
    "fingerprint": null,
    "browser_info": null,
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2024-07-30T06:19:48.869Z",
    "charges": null,
    "frm_metadata": null,
    "merchant_order_reference_id": null
}
```

4. Refunds:

Request:
```
curl --location 'http://localhost:8080/refunds' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_cNgJBniCHyPWijpb73YRpH06jVNPFSU8B8oZl9yJCa1tK9wO3kru8HXSeYfvREpD' \
--data '{
    "amount": 1800,
    "payment_id": "pay_9iF0FWAx4IczBe6lfjqN",
    "reason": "Customer returned product",
    "refund_type": "instant",
    "metadata": {
        "udf1": "value1",
        "new_customer": "true",
        "login_date": "2019-09-10T10:11:12Z"
    }
}'
```

Response:
```
{
    "refund_id": "ref_sNXFUu2iIv7W6YnkCMBI",
    "payment_id": "pay_9iF0FWAx4IczBe6lfjqN",
    "amount": 1800,
    "currency": "USD",
    "status": "succeeded",
    "reason": "Customer returned product",
    "metadata": {
        "udf1": "value1",
        "new_customer": "true",
        "login_date": "2019-09-10T10:11:12Z"
    },
    "error_message": null,
    "error_code": null,
    "created_at": "2024-07-30T06:23:22.914Z",
    "updated_at": "2024-07-30T06:23:24.894Z",
    "connector": "bambora",
    "profile_id": "pro_sUtV9MeXG0JSXuSGISfQ",
    "merchant_connector_id": "mca_iMJkO4jVosAfhRagvx0w",
    "charges": null
}
```

The following flows need to be tested for connector `Bitpay`:
1. Crypto Payments

Request:
```
curl --location 'http://localhost:8080/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_99Sx4JP34jZH3nIuLGozMU5eK4ZJ7QfuE0tN1Rw5O6k9aQSyolBElNku3AFGfxgb' \
--data-raw '{
    "amount": 300,
    "currency": "USD",
    "confirm": true,
    "email": "guest@example.com",
    "return_url": "https://google.com",
    "payment_method": "crypto",
    "payment_method_type": "crypto_currency",
    "payment_experience": "redirect_to_url",
    "payment_method_data": {
        "crypto": {
        }
    }
}'
```

Response:
```
{
    "payment_id": "pay_DPBpI5I90ikPO8CTJp1Y",
    "merchant_id": "merchant_1722321516",
    "status": "requires_customer_action",
    "amount": 300,
    "net_amount": 300,
    "amount_capturable": 300,
    "amount_received": null,
    "connector": "bitpay",
    "client_secret": "pay_DPBpI5I90ikPO8CTJp1Y_secret_nMreir9mEcGy13gQSmMe",
    "created": "2024-07-30T06:43:30.792Z",
    "currency": "USD",
    "customer_id": null,
    "customer": {
        "id": null,
        "name": null,
        "email": "guest@example.com",
        "phone": null,
        "phone_country_code": null
    },
    "description": null,
    "refunds": null,
    "disputes": null,
    "mandate_id": null,
    "mandate_data": null,
    "setup_future_usage": null,
    "off_session": null,
    "capture_on": null,
    "capture_method": null,
    "payment_method": "crypto",
    "payment_method_data": {
        "crypto": {},
        "billing": null
    },
    "payment_token": null,
    "shipping": null,
    "billing": null,
    "order_details": null,
    "email": null,
    "name": null,
    "phone": null,
    "return_url": "https://google.com/",
    "authentication_type": "no_three_ds",
    "statement_descriptor_name": null,
    "statement_descriptor_suffix": null,
    "next_action": {
        "type": "redirect_to_url",
        "redirect_to_url": "http://localhost:8080/payments/redirect/pay_DPBpI5I90ikPO8CTJp1Y/merchant_1722321516/pay_DPBpI5I90ikPO8CTJp1Y_1"
    },
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": "redirect_to_url",
    "payment_method_type": "crypto_currency",
    "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": "JyqXeDMKQRAmVBCXBd2aEc",
    "frm_message": null,
    "metadata": null,
    "connector_metadata": null,
    "feature_metadata": null,
    "reference_id": "pay_DPBpI5I90ikPO8CTJp1Y_1",
    "payment_link": null,
    "profile_id": "pro_BUr4X7qL5JQnl1U9FFZs",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_x8QTHQaO14QhJ91e69Sz",
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2024-07-30T06:58:30.791Z",
    "fingerprint": null,
    "browser_info": null,
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2024-07-30T06:43:32.508Z",
    "charges": null,
    "frm_metadata": null,
    "merchant_order_reference_id": null
}
```

The following flows need to be tested for connector `Stax`:
1. Authorize(Automatic):

Request:
```
curl --location 'http://localhost:8080/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_BtwJUODc6bNNM5ySoCmUS4p6JCSpPHnddRpnm8kx1oKi6WQgNkxTKZGXNaVKvtSG' \
--data-raw '{
  "amount": 2222,
  "currency": "USD",
  "confirm": true,
  "capture_method": "automatic",
  "customer_id": "cust444",
  "email": "guest@example.com",
  "payment_method": "card",
  "payment_method_type": "credit",
  "payment_method_data": {
    "card": {
      "card_number": "4111111111111111",
      "card_exp_month": "10",
      "card_exp_year": "25",
      "card_holder_name": "joseph Doe",
      "card_cvc": "123"
    }
  }
}'
```

Response:
```
{
    "payment_id": "pay_a0eHRq2zOMFJBmpmznQ8",
    "merchant_id": "merchant_1722322392",
    "status": "succeeded",
    "amount": 2222,
    "net_amount": 2222,
    "amount_capturable": 0,
    "amount_received": 2222,
    "connector": "stax",
    "client_secret": "pay_a0eHRq2zOMFJBmpmznQ8_secret_iijSwRexoORYfIHmwpVK",
    "created": "2024-07-30T07:02:35.652Z",
    "currency": "USD",
    "customer_id": "cust444",
    "customer": {
        "id": "cust444",
        "name": null,
        "email": "guest@example.com",
        "phone": null,
        "phone_country_code": null
    },
    "description": null,
    "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": "1111",
            "card_type": null,
            "card_network": null,
            "card_issuer": null,
            "card_issuing_country": null,
            "card_isin": "411111",
            "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": null,
    "shipping": null,
    "billing": null,
    "order_details": null,
    "email": "guest@example.com",
    "name": null,
    "phone": null,
    "return_url": null,
    "authentication_type": "no_three_ds",
    "statement_descriptor_name": null,
    "statement_descriptor_suffix": null,
    "next_action": null,
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": "credit",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": {
        "customer_id": "cust444",
        "created_at": 1722322955,
        "expires": 1722326555,
        "secret": "epk_a28c3e61f16f4a5da93b9fa942e2fffc"
    },
    "manual_retry_allowed": false,
    "connector_transaction_id": "3a476321-bb19-46f0-b9b6-8eab5d661f2a",
    "frm_message": null,
    "metadata": null,
    "connector_metadata": null,
    "feature_metadata": null,
    "reference_id": "pay_a0eHRq2zOMFJBmpmznQ8_1",
    "payment_link": null,
    "profile_id": "pro_dFvHY1XCf6cD4QOSyBtM",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_0o3x3l2iNNeSlCyNuLDF",
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2024-07-30T07:17:35.652Z",
    "fingerprint": null,
    "browser_info": null,
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2024-07-30T07:02:39.845Z",
    "charges": null,
    "frm_metadata": null,
    "merchant_order_reference_id": null
}
```

2. Authorize(Manual Capture):

Request:
```
curl --location 'http://localhost:8080/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_BtwJUODc6bNNM5ySoCmUS4p6JCSpPHnddRpnm8kx1oKi6WQgNkxTKZGXNaVKvtSG' \
--data-raw '{
  "amount": 2222,
  "currency": "USD",
  "confirm": true,
  "capture_method": "manual",
  "customer_id": "cust444",
  "email": "guest@example.com",
  "payment_method": "card",
  "payment_method_type": "credit",
  "payment_method_data": {
    "card": {
      "card_number": "4111111111111111",
      "card_exp_month": "10",
      "card_exp_year": "25",
      "card_holder_name": "joseph Doe",
      "card_cvc": "123"
    }
  }
}'
```

Response:
```
{
    "payment_id": "pay_TdofYbOgeNyCaV3QRVTP",
    "merchant_id": "merchant_1722322392",
    "status": "requires_capture",
    "amount": 2222,
    "net_amount": 2222,
    "amount_capturable": 2222,
    "amount_received": null,
    "connector": "stax",
    "client_secret": "pay_TdofYbOgeNyCaV3QRVTP_secret_iysfBGEuMiMQv1CAu28o",
    "created": "2024-07-30T07:03:01.825Z",
    "currency": "USD",
    "customer_id": "cust444",
    "customer": {
        "id": "cust444",
        "name": null,
        "email": "guest@example.com",
        "phone": null,
        "phone_country_code": null
    },
    "description": null,
    "refunds": null,
    "disputes": null,
    "mandate_id": null,
    "mandate_data": null,
    "setup_future_usage": null,
    "off_session": null,
    "capture_on": null,
    "capture_method": "manual",
    "payment_method": "card",
    "payment_method_data": {
        "card": {
            "last4": "1111",
            "card_type": null,
            "card_network": null,
            "card_issuer": null,
            "card_issuing_country": null,
            "card_isin": "411111",
            "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": null,
    "shipping": null,
    "billing": null,
    "order_details": null,
    "email": "guest@example.com",
    "name": null,
    "phone": null,
    "return_url": null,
    "authentication_type": "no_three_ds",
    "statement_descriptor_name": null,
    "statement_descriptor_suffix": null,
    "next_action": null,
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": "credit",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": {
        "customer_id": "cust444",
        "created_at": 1722322981,
        "expires": 1722326581,
        "secret": "epk_d9a8b2f7caf74bf587dec7d9de2092a2"
    },
    "manual_retry_allowed": false,
    "connector_transaction_id": "786f8ff4-8a5f-4f3d-a0a3-b21a555a383e",
    "frm_message": null,
    "metadata": null,
    "connector_metadata": null,
    "feature_metadata": null,
    "reference_id": "pay_TdofYbOgeNyCaV3QRVTP_1",
    "payment_link": null,
    "profile_id": "pro_dFvHY1XCf6cD4QOSyBtM",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_0o3x3l2iNNeSlCyNuLDF",
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2024-07-30T07:18:01.825Z",
    "fingerprint": null,
    "browser_info": null,
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2024-07-30T07:03:04.575Z",
    "charges": null,
    "frm_metadata": null,
    "merchant_order_reference_id": null
}
```

3. Capture:

Request:
```
curl --location 'http://localhost:8080/payments/pay_TdofYbOgeNyCaV3QRVTP/capture' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_BtwJUODc6bNNM5ySoCmUS4p6JCSpPHnddRpnm8kx1oKi6WQgNkxTKZGXNaVKvtSG' \
--data '{
  "statement_descriptor_name": "Joseph",
  "statement_descriptor_suffix": "JS"
}'
```

Response:
```
{
    "payment_id": "pay_TdofYbOgeNyCaV3QRVTP",
    "merchant_id": "merchant_1722322392",
    "status": "succeeded",
    "amount": 2222,
    "net_amount": 2222,
    "amount_capturable": 0,
    "amount_received": 2222,
    "connector": "stax",
    "client_secret": "pay_TdofYbOgeNyCaV3QRVTP_secret_iysfBGEuMiMQv1CAu28o",
    "created": "2024-07-30T07:03:01.825Z",
    "currency": "USD",
    "customer_id": "cust444",
    "customer": {
        "id": "cust444",
        "name": null,
        "email": "guest@example.com",
        "phone": null,
        "phone_country_code": null
    },
    "description": null,
    "refunds": null,
    "disputes": null,
    "mandate_id": null,
    "mandate_data": null,
    "setup_future_usage": null,
    "off_session": null,
    "capture_on": null,
    "capture_method": "manual",
    "payment_method": "card",
    "payment_method_data": {
        "card": {
            "last4": "1111",
            "card_type": null,
            "card_network": null,
            "card_issuer": null,
            "card_issuing_country": null,
            "card_isin": "411111",
            "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": null,
    "shipping": null,
    "billing": null,
    "order_details": null,
    "email": "guest@example.com",
    "name": null,
    "phone": null,
    "return_url": null,
    "authentication_type": "no_three_ds",
    "statement_descriptor_name": null,
    "statement_descriptor_suffix": null,
    "next_action": null,
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": "credit",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": null,
    "manual_retry_allowed": false,
    "connector_transaction_id": "786f8ff4-8a5f-4f3d-a0a3-b21a555a383e",
    "frm_message": null,
    "metadata": null,
    "connector_metadata": null,
    "feature_metadata": null,
    "reference_id": "pay_TdofYbOgeNyCaV3QRVTP_1",
    "payment_link": null,
    "profile_id": "pro_dFvHY1XCf6cD4QOSyBtM",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_0o3x3l2iNNeSlCyNuLDF",
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2024-07-30T07:18:01.825Z",
    "fingerprint": null,
    "browser_info": null,
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2024-07-30T07:03:30.629Z",
    "charges": null,
    "frm_metadata": null,
    "merchant_order_reference_id": null
}
```

4. Refunds:

Request:
```
curl --location 'http://localhost:8080/refunds' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_BtwJUODc6bNNM5ySoCmUS4p6JCSpPHnddRpnm8kx1oKi6WQgNkxTKZGXNaVKvtSG' \
--data '{
  "payment_id": "pay_TdofYbOgeNyCaV3QRVTP",
  "reason": "Customer returned product",
  "refund_type": "instant",
  "metadata": {
    "udf1": "value1",
    "new_customer": "true",
    "login_date": "2019-09-10T10:11:12Z"
  }
}'
```

Response:
```
{
    "refund_id": "ref_cTaclSt8LdumcOvNvIbB",
    "payment_id": "pay_TdofYbOgeNyCaV3QRVTP",
    "amount": 2222,
    "currency": "USD",
    "status": "succeeded",
    "reason": "Customer returned product",
    "metadata": {
        "udf1": "value1",
        "new_customer": "true",
        "login_date": "2019-09-10T10:11:12Z"
    },
    "error_message": null,
    "error_code": null,
    "created_at": "2024-07-30T07:04:54.998Z",
    "updated_at": "2024-07-30T07:04:56.594Z",
    "connector": "stax",
    "profile_id": "pro_dFvHY1XCf6cD4QOSyBtM",
    "merchant_connector_id": "mca_0o3x3l2iNNeSlCyNuLDF",
    "charges": null
}
```


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

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