Bug: [FEATURE] [CASHTOCODE] Move connector code to crate hyperswitch_connectors



### Feature Description

Connector code for `cashtocode` needs to be moved from crate `router` to new crate `hyperswitch_connectors`

### Possible Implementation

Connector code for `cashtocode` 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/crates/hyperswitch_connectors/src/connectors.rs b/crates/hyperswitch_connectors/src/connectors.rs
index 48c50936d60..f057b7d4a33 100644
--- a/crates/hyperswitch_connectors/src/connectors.rs
+++ b/crates/hyperswitch_connectors/src/connectors.rs
@@ -1,5 +1,8 @@
 pub mod bambora;
 pub mod bitpay;
+pub mod cashtocode;
+pub mod coinbase;
+pub mod cryptopay;
 pub mod deutschebank;
 pub mod fiserv;
 pub mod fiservemea;
@@ -18,8 +21,9 @@ pub mod volt;
 pub mod worldline;
 
 pub use self::{
-    bambora::Bambora, bitpay::Bitpay, deutschebank::Deutschebank, fiserv::Fiserv,
-    fiservemea::Fiservemea, fiuu::Fiuu, globepay::Globepay, helcim::Helcim, mollie::Mollie,
-    nexixpay::Nexixpay, novalnet::Novalnet, powertranz::Powertranz, stax::Stax, taxjar::Taxjar,
-    thunes::Thunes, tsys::Tsys, volt::Volt, worldline::Worldline,
+    bambora::Bambora, bitpay::Bitpay, cashtocode::Cashtocode, coinbase::Coinbase,
+    cryptopay::Cryptopay, deutschebank::Deutschebank, fiserv::Fiserv, fiservemea::Fiservemea,
+    fiuu::Fiuu, globepay::Globepay, helcim::Helcim, mollie::Mollie, nexixpay::Nexixpay,
+    novalnet::Novalnet, powertranz::Powertranz, stax::Stax, taxjar::Taxjar, thunes::Thunes,
+    tsys::Tsys, volt::Volt, worldline::Worldline,
 };
diff --git a/crates/router/src/connector/cashtocode.rs b/crates/hyperswitch_connectors/src/connectors/cashtocode.rs
similarity index 67%
rename from crates/router/src/connector/cashtocode.rs
rename to crates/hyperswitch_connectors/src/connectors/cashtocode.rs
index 2155b80dd81..c72b63aebc0 100644
--- a/crates/router/src/connector/cashtocode.rs
+++ b/crates/hyperswitch_connectors/src/connectors/cashtocode.rs
@@ -1,33 +1,41 @@
 pub mod transformers;
-
 use base64::Engine;
+use common_enums::enums;
 use common_utils::{
-    request::RequestContent,
+    errors::CustomResult,
+    ext_traits::ByteSliceExt,
+    request::{Method, Request, RequestBuilder, RequestContent},
     types::{AmountConvertor, FloatMajorUnit, FloatMajorUnitForConnector},
 };
-use diesel_models::enums;
 use error_stack::ResultExt;
-use masking::{PeekInterface, Secret};
-use transformers as cashtocode;
-
-use super::utils as connector_utils;
-use crate::{
-    configs::settings::{self},
-    core::errors::{self, CustomResult},
-    events::connector_api_logs::ConnectorEvent,
-    headers,
-    services::{
-        self,
-        request::{self, Mask},
-        ConnectorIntegration, ConnectorValidation,
+use hyperswitch_domain_models::{
+    api::ApplicationResponse,
+    router_data::{AccessToken, ErrorResponse, RouterData},
+    router_flow_types::{
+        access_token_auth::AccessTokenAuth,
+        payments::{Authorize, Capture, PSync, PaymentMethodToken, Session, SetupMandate, Void},
+        refunds::{Execute, RSync},
     },
-    types::{
-        self,
-        api::{self, ConnectorCommon, ConnectorCommonExt},
-        storage, ErrorResponse, Response,
+    router_request_types::{
+        AccessTokenRequestData, PaymentMethodTokenizationData, PaymentsAuthorizeData,
+        PaymentsCancelData, PaymentsCaptureData, PaymentsSessionData, PaymentsSyncData,
+        RefundsData, SetupMandateRequestData,
     },
-    utils::{ByteSliceExt, BytesExt},
+    router_response_types::{PaymentsResponseData, RefundsResponseData},
+    types::{PaymentsAuthorizeRouterData, PaymentsSyncRouterData},
 };
+use hyperswitch_interfaces::{
+    api::{self, ConnectorCommon, ConnectorCommonExt, ConnectorIntegration, ConnectorValidation},
+    configs::Connectors,
+    errors,
+    events::connector_api_logs::ConnectorEvent,
+    types::{PaymentsAuthorizeType, Response},
+    webhooks,
+};
+use masking::{Mask, PeekInterface, Secret};
+use transformers as cashtocode;
+
+use crate::{constants::headers, types::ResponseRouterData, utils};
 
 #[derive(Clone)]
 pub struct Cashtocode {
@@ -56,13 +64,13 @@ impl api::RefundExecute for Cashtocode {}
 impl api::RefundSync for Cashtocode {}
 
 fn get_b64_auth_cashtocode(
-    payment_method_type: &Option<storage::enums::PaymentMethodType>,
+    payment_method_type: &Option<enums::PaymentMethodType>,
     auth_type: &transformers::CashtocodeAuth,
-) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
     fn construct_basic_auth(
         username: Option<Secret<String>>,
         password: Option<Secret<String>>,
-    ) -> Result<request::Maskable<String>, errors::ConnectorError> {
+    ) -> Result<masking::Maskable<String>, errors::ConnectorError> {
         let username = username.ok_or(errors::ConnectorError::FailedToObtainAuthType)?;
         let password = password.ok_or(errors::ConnectorError::FailedToObtainAuthType)?;
         Ok(format!(
@@ -77,11 +85,11 @@ fn get_b64_auth_cashtocode(
     }
 
     let auth_header = match payment_method_type {
-        Some(storage::enums::PaymentMethodType::ClassicReward) => construct_basic_auth(
+        Some(enums::PaymentMethodType::ClassicReward) => construct_basic_auth(
             auth_type.username_classic.to_owned(),
             auth_type.password_classic.to_owned(),
         ),
-        Some(storage::enums::PaymentMethodType::Evoucher) => construct_basic_auth(
+        Some(enums::PaymentMethodType::Evoucher) => construct_basic_auth(
             auth_type.username_evoucher.to_owned(),
             auth_type.password_evoucher.to_owned(),
         ),
@@ -91,12 +99,8 @@ fn get_b64_auth_cashtocode(
     Ok(vec![(headers::AUTHORIZATION.to_string(), auth_header)])
 }
 
-impl
-    ConnectorIntegration<
-        api::PaymentMethodToken,
-        types::PaymentMethodTokenizationData,
-        types::PaymentsResponseData,
-    > for Cashtocode
+impl ConnectorIntegration<PaymentMethodToken, PaymentMethodTokenizationData, PaymentsResponseData>
+    for Cashtocode
 {
     // Not Implemented (R)
 }
@@ -115,7 +119,7 @@ impl ConnectorCommon for Cashtocode {
         "application/json"
     }
 
-    fn base_url<'a>(&self, connectors: &'a settings::Connectors) -> &'a str {
+    fn base_url<'a>(&self, connectors: &'a Connectors) -> &'a str {
         connectors.cashtocode.base_url.as_ref()
     }
 
@@ -153,39 +157,26 @@ impl ConnectorValidation for Cashtocode {
         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()),
             ),
         }
     }
 }
 
-impl ConnectorIntegration<api::Session, types::PaymentsSessionData, types::PaymentsResponseData>
-    for Cashtocode
-{
+impl ConnectorIntegration<Session, PaymentsSessionData, PaymentsResponseData> for Cashtocode {
     //TODO: implement sessions flow
 }
 
-impl ConnectorIntegration<api::AccessTokenAuth, types::AccessTokenRequestData, types::AccessToken>
-    for Cashtocode
-{
-}
+impl ConnectorIntegration<AccessTokenAuth, AccessTokenRequestData, AccessToken> for Cashtocode {}
 
-impl
-    ConnectorIntegration<
-        api::SetupMandate,
-        types::SetupMandateRequestData,
-        types::PaymentsResponseData,
-    > for Cashtocode
+impl ConnectorIntegration<SetupMandate, SetupMandateRequestData, PaymentsResponseData>
+    for Cashtocode
 {
     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 Cashtocode".to_string())
                 .into(),
@@ -193,17 +184,15 @@ impl
     }
 }
 
-impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::PaymentsResponseData>
-    for Cashtocode
-{
+impl ConnectorIntegration<Authorize, PaymentsAuthorizeData, PaymentsResponseData> for Cashtocode {
     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> {
         let mut header = vec![(
             headers::CONTENT_TYPE.to_string(),
-            types::PaymentsAuthorizeType::get_content_type(self)
+            PaymentsAuthorizeType::get_content_type(self)
                 .to_owned()
                 .into(),
         )];
@@ -225,8 +214,8 @@ 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!(
             "{}/merchant/paytokens",
@@ -236,10 +225,10 @@ impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::P
 
     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,
@@ -250,20 +239,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(),
@@ -272,10 +257,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: cashtocode::CashtocodePaymentsResponse = res
             .response
             .parse_struct("Cashtocode PaymentsAuthorizeResponse")
@@ -283,7 +268,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,
@@ -299,23 +284,21 @@ impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::P
     }
 }
 
-impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsResponseData>
-    for Cashtocode
-{
+impl ConnectorIntegration<PSync, PaymentsSyncData, PaymentsResponseData> for Cashtocode {
     // default implementation of build_request method will be executed
     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: transformers::CashtocodePaymentsSyncResponse = res
             .response
             .parse_struct("CashtocodePaymentsSyncResponse")
             .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
         event_builder.map(|i| i.set_response_body(&response));
         router_env::logger::info!(connector_response=?response);
-        types::RouterData::try_from(types::ResponseRouterData {
+        RouterData::try_from(ResponseRouterData {
             response,
             data: data.clone(),
             http_code: res.status_code,
@@ -331,18 +314,12 @@ impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsRe
     }
 }
 
-impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::PaymentsResponseData>
-    for Cashtocode
-{
+impl ConnectorIntegration<Capture, PaymentsCaptureData, PaymentsResponseData> for Cashtocode {
     fn build_request(
         &self,
-        _req: &types::RouterData<
-            api::Capture,
-            types::PaymentsCaptureData,
-            types::PaymentsResponseData,
-        >,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        _req: &RouterData<Capture, PaymentsCaptureData, PaymentsResponseData>,
+        _connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
         Err(errors::ConnectorError::FlowNotSupported {
             flow: "Capture".to_string(),
             connector: "Cashtocode".to_string(),
@@ -351,14 +328,12 @@ impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::Payme
     }
 }
 
-impl ConnectorIntegration<api::Void, types::PaymentsCancelData, types::PaymentsResponseData>
-    for Cashtocode
-{
+impl ConnectorIntegration<Void, PaymentsCancelData, PaymentsResponseData> for Cashtocode {
     fn build_request(
         &self,
-        _req: &types::RouterData<api::Void, types::PaymentsCancelData, types::PaymentsResponseData>,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        _req: &RouterData<Void, PaymentsCancelData, PaymentsResponseData>,
+        _connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
         Err(errors::ConnectorError::FlowNotSupported {
             flow: "Payments Cancel".to_string(),
             connector: "Cashtocode".to_string(),
@@ -368,21 +343,20 @@ impl ConnectorIntegration<api::Void, types::PaymentsCancelData, types::PaymentsR
 }
 
 #[async_trait::async_trait]
-impl api::IncomingWebhook for Cashtocode {
+impl webhooks::IncomingWebhook for Cashtocode {
     fn get_webhook_source_verification_signature(
         &self,
-        request: &api::IncomingWebhookRequestDetails<'_>,
+        request: &webhooks::IncomingWebhookRequestDetails<'_>,
         _connector_webhook_secrets: &api_models::webhooks::ConnectorWebhookSecrets,
     ) -> CustomResult<Vec<u8>, errors::ConnectorError> {
-        let base64_signature =
-            connector_utils::get_header_key_value("authorization", request.headers)?;
+        let base64_signature = utils::get_header_key_value("authorization", request.headers)?;
         let signature = base64_signature.as_bytes().to_owned();
         Ok(signature)
     }
 
     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>>,
@@ -412,7 +386,7 @@ impl api::IncomingWebhook for Cashtocode {
 
     fn get_webhook_object_reference_id(
         &self,
-        request: &api::IncomingWebhookRequestDetails<'_>,
+        request: &webhooks::IncomingWebhookRequestDetails<'_>,
     ) -> CustomResult<api_models::webhooks::ObjectReferenceId, errors::ConnectorError> {
         let webhook: transformers::CashtocodePaymentsSyncResponse = request
             .body
@@ -426,14 +400,14 @@ impl api::IncomingWebhook for Cashtocode {
 
     fn get_webhook_event_type(
         &self,
-        _request: &api::IncomingWebhookRequestDetails<'_>,
-    ) -> CustomResult<api::IncomingWebhookEvent, errors::ConnectorError> {
-        Ok(api::IncomingWebhookEvent::PaymentIntentSuccess)
+        _request: &webhooks::IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<api_models::webhooks::IncomingWebhookEvent, errors::ConnectorError> {
+        Ok(api_models::webhooks::IncomingWebhookEvent::PaymentIntentSuccess)
     }
 
     fn get_webhook_resource_object(
         &self,
-        request: &api::IncomingWebhookRequestDetails<'_>,
+        request: &webhooks::IncomingWebhookRequestDetails<'_>,
     ) -> CustomResult<Box<dyn masking::ErasedMaskSerialize>, errors::ConnectorError> {
         let webhook: transformers::CashtocodeIncomingWebhook = request
             .body
@@ -445,9 +419,8 @@ impl api::IncomingWebhook for Cashtocode {
 
     fn get_webhook_api_response(
         &self,
-        request: &api::IncomingWebhookRequestDetails<'_>,
-    ) -> CustomResult<services::api::ApplicationResponse<serde_json::Value>, errors::ConnectorError>
-    {
+        request: &webhooks::IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<ApplicationResponse<serde_json::Value>, errors::ConnectorError> {
         let status = "EXECUTED".to_string();
         let obj: transformers::CashtocodePaymentsSyncResponse = request
             .body
@@ -455,22 +428,16 @@ impl api::IncomingWebhook for Cashtocode {
             .change_context(errors::ConnectorError::WebhookReferenceIdNotFound)?;
         let response: serde_json::Value =
             serde_json::json!({ "status": status, "transactionId" : obj.transaction_id});
-        Ok(services::api::ApplicationResponse::Json(response))
+        Ok(ApplicationResponse::Json(response))
     }
 }
 
-impl ConnectorIntegration<api::refunds::Execute, types::RefundsData, types::RefundsResponseData>
-    for Cashtocode
-{
+impl ConnectorIntegration<Execute, RefundsData, RefundsResponseData> for Cashtocode {
     fn build_request(
         &self,
-        _req: &types::RouterData<
-            api::refunds::Execute,
-            types::RefundsData,
-            types::RefundsResponseData,
-        >,
-        _connectors: &settings::Connectors,
-    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        _req: &RouterData<Execute, RefundsData, RefundsResponseData>,
+        _connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
         Err(errors::ConnectorError::FlowNotSupported {
             flow: "Refunds".to_string(),
             connector: "Cashtocode".to_string(),
@@ -479,8 +446,6 @@ impl ConnectorIntegration<api::refunds::Execute, types::RefundsData, types::Refu
     }
 }
 
-impl ConnectorIntegration<api::refunds::RSync, types::RefundsData, types::RefundsResponseData>
-    for Cashtocode
-{
+impl ConnectorIntegration<RSync, RefundsData, RefundsResponseData> for Cashtocode {
     // default implementation of build_request method will be executed
 }
diff --git a/crates/router/src/connector/cashtocode/transformers.rs b/crates/hyperswitch_connectors/src/connectors/cashtocode/transformers.rs
similarity index 81%
rename from crates/router/src/connector/cashtocode/transformers.rs
rename to crates/hyperswitch_connectors/src/connectors/cashtocode/transformers.rs
index e6f4b9e57cf..49493127621 100644
--- a/crates/router/src/connector/cashtocode/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/cashtocode/transformers.rs
@@ -1,18 +1,24 @@
 use std::collections::HashMap;
 
+use common_enums::enums;
 pub use common_utils::request::Method;
 use common_utils::{
     errors::CustomResult, ext_traits::ValueExt, id_type, pii::Email, types::FloatMajorUnit,
 };
 use error_stack::ResultExt;
+use hyperswitch_domain_models::{
+    router_data::{ConnectorAuthType, ErrorResponse, RouterData},
+    router_request_types::{PaymentsAuthorizeData, ResponseId},
+    router_response_types::{PaymentsResponseData, RedirectForm},
+    types::PaymentsAuthorizeRouterData,
+};
+use hyperswitch_interfaces::errors;
 use masking::Secret;
 use serde::{Deserialize, Serialize};
 
 use crate::{
-    connector::utils::{self, PaymentsAuthorizeRequestData, RouterData},
-    core::errors,
-    services,
-    types::{self, storage::enums},
+    types::ResponseRouterData,
+    utils::{self, PaymentsAuthorizeRequestData, RouterData as OtherRouterData},
 };
 
 #[derive(Default, Debug, Serialize)]
@@ -32,7 +38,7 @@ pub struct CashtocodePaymentsRequest {
 }
 
 fn get_mid(
-    connector_auth_type: &types::ConnectorAuthType,
+    connector_auth_type: &ConnectorAuthType,
     payment_method_type: Option<enums::PaymentMethodType>,
     currency: enums::Currency,
 ) -> Result<Secret<String>, errors::ConnectorError> {
@@ -50,10 +56,10 @@ fn get_mid(
     }
 }
 
-impl TryFrom<(&types::PaymentsAuthorizeRouterData, FloatMajorUnit)> for CashtocodePaymentsRequest {
+impl TryFrom<(&PaymentsAuthorizeRouterData, FloatMajorUnit)> for CashtocodePaymentsRequest {
     type Error = error_stack::Report<errors::ConnectorError>;
     fn try_from(
-        (item, amount): (&types::PaymentsAuthorizeRouterData, FloatMajorUnit),
+        (item, amount): (&PaymentsAuthorizeRouterData, FloatMajorUnit),
     ) -> Result<Self, Self::Error> {
         let customer_id = item.get_customer_id()?;
         let url = item.request.get_router_return_url()?;
@@ -63,7 +69,7 @@ impl TryFrom<(&types::PaymentsAuthorizeRouterData, FloatMajorUnit)> for Cashtoco
             item.request.currency,
         )?;
         match item.payment_method {
-            diesel_models::enums::PaymentMethod::Reward => Ok(Self {
+            enums::PaymentMethod::Reward => Ok(Self {
                 amount,
                 transaction_id: item.attempt_id.clone(),
                 currency: item.request.currency,
@@ -96,12 +102,12 @@ pub struct CashtocodeAuth {
     pub merchant_id_evoucher: Option<Secret<String>>,
 }
 
-impl TryFrom<&types::ConnectorAuthType> for CashtocodeAuthType {
+impl TryFrom<&ConnectorAuthType> for CashtocodeAuthType {
     type Error = error_stack::Report<errors::ConnectorError>; // Assuming ErrorStack is the appropriate error type
 
-    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::CurrencyAuthKey { auth_key_map } => {
+            ConnectorAuthType::CurrencyAuthKey { auth_key_map } => {
                 let transformed_auths = auth_key_map
                     .iter()
                     .map(|(currency, identity_auth_key)| {
@@ -125,13 +131,13 @@ impl TryFrom<&types::ConnectorAuthType> for CashtocodeAuthType {
     }
 }
 
-impl TryFrom<(&types::ConnectorAuthType, &enums::Currency)> for CashtocodeAuth {
+impl TryFrom<(&ConnectorAuthType, &enums::Currency)> for CashtocodeAuth {
     type Error = error_stack::Report<errors::ConnectorError>;
 
-    fn try_from(value: (&types::ConnectorAuthType, &enums::Currency)) -> Result<Self, Self::Error> {
+    fn try_from(value: (&ConnectorAuthType, &enums::Currency)) -> Result<Self, Self::Error> {
         let (auth_type, currency) = value;
 
-        if let types::ConnectorAuthType::CurrencyAuthKey { auth_key_map } = auth_type {
+        if let ConnectorAuthType::CurrencyAuthKey { auth_key_map } = auth_type {
             if let Some(identity_auth_key) = auth_key_map.get(currency) {
                 let cashtocode_auth: Self = identity_auth_key
                     .to_owned()
@@ -199,15 +205,15 @@ pub struct CashtocodePaymentsSyncResponse {
 fn get_redirect_form_data(
     payment_method_type: &enums::PaymentMethodType,
     response_data: CashtocodePaymentsResponseData,
-) -> CustomResult<services::RedirectForm, errors::ConnectorError> {
+) -> CustomResult<RedirectForm, errors::ConnectorError> {
     match payment_method_type {
-        enums::PaymentMethodType::ClassicReward => Ok(services::RedirectForm::Form {
+        enums::PaymentMethodType::ClassicReward => Ok(RedirectForm::Form {
             //redirect form is manually constructed because the connector for this pm type expects query params in the url
             endpoint: response_data.pay_url.to_string(),
             method: Method::Post,
             form_fields: Default::default(),
         }),
-        enums::PaymentMethodType::Evoucher => Ok(services::RedirectForm::from((
+        enums::PaymentMethodType::Evoucher => Ok(RedirectForm::from((
             //here the pay url gets parsed, and query params are sent as formfields as the connector expects
             response_data.pay_url,
             Method::Get,
@@ -220,27 +226,27 @@ fn get_redirect_form_data(
 
 impl<F>
     TryFrom<
-        types::ResponseRouterData<
+        ResponseRouterData<
             F,
             CashtocodePaymentsResponse,
-            types::PaymentsAuthorizeData,
-            types::PaymentsResponseData,
+            PaymentsAuthorizeData,
+            PaymentsResponseData,
         >,
-    > for types::RouterData<F, types::PaymentsAuthorizeData, types::PaymentsResponseData>
+    > for RouterData<F, PaymentsAuthorizeData, PaymentsResponseData>
 {
     type Error = error_stack::Report<errors::ConnectorError>;
     fn try_from(
-        item: types::ResponseRouterData<
+        item: ResponseRouterData<
             F,
             CashtocodePaymentsResponse,
-            types::PaymentsAuthorizeData,
-            types::PaymentsResponseData,
+            PaymentsAuthorizeData,
+            PaymentsResponseData,
         >,
     ) -> Result<Self, Self::Error> {
         let (status, response) = match item.response {
             CashtocodePaymentsResponse::CashtoCodeError(error_data) => (
                 enums::AttemptStatus::Failure,
-                Err(types::ErrorResponse {
+                Err(ErrorResponse {
                     code: error_data.error.to_string(),
                     status_code: item.http_code,
                     message: error_data.error_description,
@@ -259,8 +265,8 @@ impl<F>
                 let redirection_data = get_redirect_form_data(payment_method_type, response_data)?;
                 (
                     enums::AttemptStatus::AuthenticationPending,
-                    Ok(types::PaymentsResponseData::TransactionResponse {
-                        resource_id: types::ResponseId::ConnectorTransactionId(
+                    Ok(PaymentsResponseData::TransactionResponse {
+                        resource_id: ResponseId::ConnectorTransactionId(
                             item.data.attempt_id.clone(),
                         ),
                         redirection_data: Some(redirection_data),
@@ -283,29 +289,17 @@ impl<F>
     }
 }
 
-impl<F, T>
-    TryFrom<
-        types::ResponseRouterData<
-            F,
-            CashtocodePaymentsSyncResponse,
-            T,
-            types::PaymentsResponseData,
-        >,
-    > for types::RouterData<F, T, types::PaymentsResponseData>
+impl<F, T> TryFrom<ResponseRouterData<F, CashtocodePaymentsSyncResponse, T, PaymentsResponseData>>
+    for RouterData<F, T, PaymentsResponseData>
 {
     type Error = error_stack::Report<errors::ConnectorError>;
     fn try_from(
-        item: types::ResponseRouterData<
-            F,
-            CashtocodePaymentsSyncResponse,
-            T,
-            types::PaymentsResponseData,
-        >,
+        item: ResponseRouterData<F, CashtocodePaymentsSyncResponse, T, PaymentsResponseData>,
     ) -> Result<Self, Self::Error> {
         Ok(Self {
             status: enums::AttemptStatus::Charged, // Charged status is hardcoded because cashtocode do not support Psync, and we only receive webhooks when payment is succeeded, this tryFrom is used for CallConnectorAction.
-            response: Ok(types::PaymentsResponseData::TransactionResponse {
-                resource_id: types::ResponseId::ConnectorTransactionId(
+            response: Ok(PaymentsResponseData::TransactionResponse {
+                resource_id: ResponseId::ConnectorTransactionId(
                     item.data.attempt_id.clone(), //in response they only send PayUrl, so we use attempt_id as connector_transaction_id
                 ),
                 redirection_data: None,
diff --git a/crates/router/src/connector/coinbase.rs b/crates/hyperswitch_connectors/src/connectors/coinbase.rs
similarity index 64%
rename from crates/router/src/connector/coinbase.rs
rename to crates/hyperswitch_connectors/src/connectors/coinbase.rs
index 0c3c0be41db..7b149952ca8 100644
--- a/crates/router/src/connector/coinbase.rs
+++ b/crates/hyperswitch_connectors/src/connectors/coinbase.rs
@@ -2,31 +2,45 @@ pub mod transformers;
 
 use std::fmt::Debug;
 
-use common_utils::{crypto, ext_traits::ByteSliceExt, request::RequestContent};
-use diesel_models::enums;
+use common_enums::enums;
+use common_utils::{
+    crypto,
+    errors::CustomResult,
+    ext_traits::ByteSliceExt,
+    request::{Method, Request, RequestBuilder, RequestContent},
+};
 use error_stack::ResultExt;
-use transformers as coinbase;
-
-use self::coinbase::CoinbaseWebhookDetails;
-use super::utils;
-use crate::{
-    configs::settings,
-    connector::utils as connector_utils,
-    core::errors::{self, CustomResult},
-    events::connector_api_logs::ConnectorEvent,
-    headers,
-    services::{
-        self,
-        request::{self, Mask},
-        ConnectorIntegration, 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,
+    errors,
+    events::connector_api_logs::ConnectorEvent,
+    types::{PaymentsAuthorizeType, PaymentsSyncType, Response},
+    webhooks,
+};
+use masking::Mask;
+use transformers as coinbase;
+
+use self::coinbase::CoinbaseWebhookDetails;
+use crate::{constants::headers, types::ResponseRouterData, utils};
 
 #[derive(Debug, Clone)]
 pub struct Coinbase;
@@ -50,9 +64,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(),
@@ -78,14 +92,14 @@ impl ConnectorCommon for Coinbase {
         "application/json"
     }
 
-    fn base_url<'a>(&self, connectors: &'a settings::Connectors) -> &'a str {
+    fn base_url<'a>(&self, connectors: &'a Connectors) -> &'a str {
         connectors.coinbase.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: coinbase::CoinbaseAuthType = coinbase::CoinbaseAuthType::try_from(auth_type)
             .change_context(errors::ConnectorError::FailedToObtainAuthType)?;
         Ok(vec![(
@@ -128,49 +142,32 @@ impl ConnectorValidation for Coinbase {
         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()),
             ),
         }
     }
 }
 
-impl
-    ConnectorIntegration<
-        api::PaymentMethodToken,
-        types::PaymentMethodTokenizationData,
-        types::PaymentsResponseData,
-    > for Coinbase
+impl ConnectorIntegration<PaymentMethodToken, PaymentMethodTokenizationData, PaymentsResponseData>
+    for Coinbase
 {
     // Not Implemented (R)
 }
 
-impl ConnectorIntegration<api::Session, types::PaymentsSessionData, types::PaymentsResponseData>
-    for Coinbase
-{
+impl ConnectorIntegration<Session, PaymentsSessionData, PaymentsResponseData> for Coinbase {
     //TODO: implement sessions flow
 }
 
-impl ConnectorIntegration<api::AccessTokenAuth, types::AccessTokenRequestData, types::AccessToken>
-    for Coinbase
-{
-}
+impl ConnectorIntegration<AccessTokenAuth, AccessTokenRequestData, AccessToken> for Coinbase {}
 
-impl
-    ConnectorIntegration<
-        api::SetupMandate,
-        types::SetupMandateRequestData,
-        types::PaymentsResponseData,
-    > for Coinbase
+impl ConnectorIntegration<SetupMandate, SetupMandateRequestData, PaymentsResponseData>
+    for Coinbase
 {
     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 Coinbase".to_string())
                 .into(),
@@ -178,14 +175,12 @@ impl
     }
 }
 
-impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::PaymentsResponseData>
-    for Coinbase
-{
+impl ConnectorIntegration<Authorize, PaymentsAuthorizeData, PaymentsResponseData> for Coinbase {
     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)
     }
 
@@ -195,16 +190,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!("{}/charges", 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_req = coinbase::CoinbasePaymentsRequest::try_from(req)?;
         Ok(RequestContent::Json(Box::new(connector_req)))
@@ -212,19 +207,15 @@ 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,
-                )?)
-                .headers(types::PaymentsAuthorizeType::get_headers(
-                    self, req, connectors,
-                )?)
-                .set_body(types::PaymentsAuthorizeType::get_request_body(
+            RequestBuilder::new()
+                .method(Method::Post)
+                .url(&PaymentsAuthorizeType::get_url(self, req, connectors)?)
+                .headers(PaymentsAuthorizeType::get_headers(self, req, connectors)?)
+                .set_body(PaymentsAuthorizeType::get_request_body(
                     self, req, connectors,
                 )?)
                 .build(),
@@ -233,17 +224,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: coinbase::CoinbasePaymentsResponse = res
             .response
             .parse_struct("Coinbase PaymentsAuthorizeResponse")
             .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
         event_builder.map(|i| i.set_response_body(&response));
         router_env::logger::info!(connector_response=?response);
-        types::RouterData::try_from(types::ResponseRouterData {
+        RouterData::try_from(ResponseRouterData {
             response,
             data: data.clone(),
             http_code: res.status_code,
@@ -260,14 +251,12 @@ impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::P
     }
 }
 
-impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsResponseData>
-    for Coinbase
-{
+impl ConnectorIntegration<PSync, PaymentsSyncData, PaymentsResponseData> for Coinbase {
     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)
     }
 
@@ -277,8 +266,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_id = _req
             .request
@@ -294,31 +283,31 @@ 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)?)
-                .headers(types::PaymentsSyncType::get_headers(self, req, connectors)?)
+            RequestBuilder::new()
+                .method(Method::Get)
+                .url(&PaymentsSyncType::get_url(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: coinbase::CoinbasePaymentsResponse = res
             .response
             .parse_struct("coinbase PaymentsSyncResponse")
             .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
         event_builder.map(|i| i.set_response_body(&response));
         router_env::logger::info!(connector_response=?response);
-        types::RouterData::try_from(types::ResponseRouterData {
+        RouterData::try_from(ResponseRouterData {
             response,
             data: data.clone(),
             http_code: res.status_code,
@@ -335,14 +324,12 @@ impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsRe
     }
 }
 
-impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::PaymentsResponseData>
-    for Coinbase
-{
+impl ConnectorIntegration<Capture, PaymentsCaptureData, PaymentsResponseData> for Coinbase {
     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: "Coinbase".to_string(),
@@ -351,19 +338,14 @@ impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::Payme
     }
 }
 
-impl ConnectorIntegration<api::Void, types::PaymentsCancelData, types::PaymentsResponseData>
-    for Coinbase
-{
-}
+impl ConnectorIntegration<Void, PaymentsCancelData, PaymentsResponseData> for Coinbase {}
 
-impl ConnectorIntegration<api::Execute, types::RefundsData, types::RefundsResponseData>
-    for Coinbase
-{
+impl ConnectorIntegration<Execute, RefundsData, RefundsResponseData> for Coinbase {
     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::FlowNotSupported {
             flow: "Refund".to_string(),
             connector: "Coinbase".to_string(),
@@ -372,22 +354,22 @@ impl ConnectorIntegration<api::Execute, types::RefundsData, types::RefundsRespon
     }
 }
 
-impl ConnectorIntegration<api::RSync, types::RefundsData, types::RefundsResponseData> for Coinbase {
+impl ConnectorIntegration<RSync, RefundsData, RefundsResponseData> for Coinbase {
     // default implementation of build_request method will be executed
 }
 
 #[async_trait::async_trait]
-impl api::IncomingWebhook for Coinbase {
+impl webhooks::IncomingWebhook for Coinbase {
     fn get_webhook_source_verification_algorithm(
         &self,
-        _request: &api::IncomingWebhookRequestDetails<'_>,
+        _request: &webhooks::IncomingWebhookRequestDetails<'_>,
     ) -> CustomResult<Box<dyn crypto::VerifySignature + Send>, errors::ConnectorError> {
         Ok(Box::new(crypto::HmacSha256))
     }
 
     fn get_webhook_source_verification_signature(
         &self,
-        request: &api::IncomingWebhookRequestDetails<'_>,
+        request: &webhooks::IncomingWebhookRequestDetails<'_>,
         _connector_webhook_secrets: &api_models::webhooks::ConnectorWebhookSecrets,
     ) -> CustomResult<Vec<u8>, errors::ConnectorError> {
         let base64_signature =
@@ -398,7 +380,7 @@ impl api::IncomingWebhook for Coinbase {
 
     fn get_webhook_source_verification_message(
         &self,
-        request: &api::IncomingWebhookRequestDetails<'_>,
+        request: &webhooks::IncomingWebhookRequestDetails<'_>,
         _merchant_id: &common_utils::id_type::MerchantId,
         _connector_webhook_secrets: &api_models::webhooks::ConnectorWebhookSecrets,
     ) -> CustomResult<Vec<u8>, errors::ConnectorError> {
@@ -409,7 +391,7 @@ impl api::IncomingWebhook for Coinbase {
 
     fn get_webhook_object_reference_id(
         &self,
-        request: &api::IncomingWebhookRequestDetails<'_>,
+        request: &webhooks::IncomingWebhookRequestDetails<'_>,
     ) -> CustomResult<api_models::webhooks::ObjectReferenceId, errors::ConnectorError> {
         let notif: CoinbaseWebhookDetails = request
             .body
@@ -422,31 +404,31 @@ impl api::IncomingWebhook for Coinbase {
 
     fn get_webhook_event_type(
         &self,
-        request: &api::IncomingWebhookRequestDetails<'_>,
-    ) -> CustomResult<api::IncomingWebhookEvent, errors::ConnectorError> {
+        request: &webhooks::IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<api_models::webhooks::IncomingWebhookEvent, errors::ConnectorError> {
         let notif: CoinbaseWebhookDetails = request
             .body
             .parse_struct("CoinbaseWebhookDetails")
             .change_context(errors::ConnectorError::WebhookEventTypeNotFound)?;
         match notif.event.event_type {
             coinbase::WebhookEventType::Confirmed | coinbase::WebhookEventType::Resolved => {
-                Ok(api::IncomingWebhookEvent::PaymentIntentSuccess)
+                Ok(api_models::webhooks::IncomingWebhookEvent::PaymentIntentSuccess)
             }
             coinbase::WebhookEventType::Failed => {
-                Ok(api::IncomingWebhookEvent::PaymentActionRequired)
+                Ok(api_models::webhooks::IncomingWebhookEvent::PaymentActionRequired)
             }
             coinbase::WebhookEventType::Pending => {
-                Ok(api::IncomingWebhookEvent::PaymentIntentProcessing)
+                Ok(api_models::webhooks::IncomingWebhookEvent::PaymentIntentProcessing)
             }
             coinbase::WebhookEventType::Unknown | coinbase::WebhookEventType::Created => {
-                Ok(api::IncomingWebhookEvent::EventNotSupported)
+                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> {
         let notif: CoinbaseWebhookDetails = request
             .body
diff --git a/crates/router/src/connector/coinbase/transformers.rs b/crates/hyperswitch_connectors/src/connectors/coinbase/transformers.rs
similarity index 87%
rename from crates/router/src/connector/coinbase/transformers.rs
rename to crates/hyperswitch_connectors/src/connectors/coinbase/transformers.rs
index 82a6add72ee..3633c366c4c 100644
--- a/crates/router/src/connector/coinbase/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/coinbase/transformers.rs
@@ -1,15 +1,24 @@
 use std::collections::HashMap;
 
-use common_utils::pii;
+use common_enums::enums;
+use common_utils::{pii, request::Method};
 use error_stack::ResultExt;
+use hyperswitch_domain_models::{
+    router_data::{ConnectorAuthType, RouterData},
+    router_flow_types::refunds::{Execute, RSync},
+    router_request_types::ResponseId,
+    router_response_types::{PaymentsResponseData, RedirectForm},
+    types,
+};
+use hyperswitch_interfaces::errors;
+use masking::Secret;
 use serde::{Deserialize, Serialize};
 
 use crate::{
-    connector::utils::{self, AddressDetailsData, PaymentsAuthorizeRequestData, RouterData},
-    core::errors,
-    pii::Secret,
-    services,
-    types::{self, api, storage::enums},
+    types::{RefundsResponseRouterData, ResponseRouterData},
+    utils::{
+        self, AddressDetailsData, PaymentsAuthorizeRequestData, RouterData as OtherRouterData,
+    },
 };
 
 #[derive(Debug, Default, Eq, PartialEq, Serialize)]
@@ -46,10 +55,10 @@ pub struct CoinbaseAuthType {
     pub(super) api_key: Secret<String>,
 }
 
-impl TryFrom<&types::ConnectorAuthType> for CoinbaseAuthType {
+impl TryFrom<&ConnectorAuthType> for CoinbaseAuthType {
     type Error = error_stack::Report<errors::ConnectorError>;
-    fn try_from(_auth_type: &types::ConnectorAuthType) -> Result<Self, Self::Error> {
-        if let types::ConnectorAuthType::HeaderKey { api_key } = _auth_type {
+    fn try_from(_auth_type: &ConnectorAuthType) -> Result<Self, Self::Error> {
+        if let ConnectorAuthType::HeaderKey { api_key } = _auth_type {
             Ok(Self {
                 api_key: api_key.to_owned(),
             })
@@ -112,23 +121,17 @@ pub struct CoinbasePaymentsResponse {
     data: CoinbasePaymentResponseData,
 }
 
-impl<F, T>
-    TryFrom<types::ResponseRouterData<F, CoinbasePaymentsResponse, T, types::PaymentsResponseData>>
-    for types::RouterData<F, T, types::PaymentsResponseData>
+impl<F, T> TryFrom<ResponseRouterData<F, CoinbasePaymentsResponse, T, PaymentsResponseData>>
+    for RouterData<F, T, PaymentsResponseData>
 {
     type Error = error_stack::Report<errors::ConnectorError>;
     fn try_from(
-        item: types::ResponseRouterData<
-            F,
-            CoinbasePaymentsResponse,
-            T,
-            types::PaymentsResponseData,
-        >,
+        item: ResponseRouterData<F, CoinbasePaymentsResponse, T, PaymentsResponseData>,
     ) -> Result<Self, Self::Error> {
         let form_fields = HashMap::new();
-        let redirection_data = services::RedirectForm::Form {
+        let redirection_data = RedirectForm::Form {
             endpoint: item.response.data.hosted_url.to_string(),
-            method: services::Method::Get,
+            method: Method::Get,
             form_fields,
         };
         let timeline = item
@@ -138,10 +141,10 @@ impl<F, T>
             .last()
             .ok_or(errors::ConnectorError::ResponseHandlingFailed)?
             .clone();
-        let connector_id = types::ResponseId::ConnectorTransactionId(item.response.data.id.clone());
+        let connector_id = ResponseId::ConnectorTransactionId(item.response.data.id.clone());
         let attempt_status = timeline.status.clone();
         let response_data = timeline.context.map_or(
-            Ok(types::PaymentsResponseData::TransactionResponse {
+            Ok(PaymentsResponseData::TransactionResponse {
                 resource_id: connector_id.clone(),
                 redirection_data: Some(redirection_data),
                 mandate_reference: None,
@@ -152,9 +155,9 @@ impl<F, T>
                 charge_id: None,
             }),
             |context| {
-                Ok(types::PaymentsResponseData::TransactionUnresolvedResponse{
+                Ok(PaymentsResponseData::TransactionUnresolvedResponse{
                 resource_id: connector_id,
-                reason: Some(api::enums::UnresolvedResponseReason {
+                reason: Some(api_models::enums::UnresolvedResponseReason {
                 code: context.to_string(),
                 message: "Please check the transaction in coinbase dashboard and resolve manually"
                     .to_string(),
@@ -207,12 +210,12 @@ impl From<RefundStatus> for enums::RefundStatus {
 #[derive(Default, Debug, Clone, Serialize, Deserialize)]
 pub struct RefundResponse {}
 
-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> {
         Err(errors::ConnectorError::NotImplemented(
             "try_from RefundsResponseRouterData".to_string(),
@@ -221,12 +224,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> {
         Err(errors::ConnectorError::NotImplemented(
             "try_from RefundsResponseRouterData".to_string(),
diff --git a/crates/router/src/connector/cryptopay.rs b/crates/hyperswitch_connectors/src/connectors/cryptopay.rs
similarity index 69%
rename from crates/router/src/connector/cryptopay.rs
rename to crates/hyperswitch_connectors/src/connectors/cryptopay.rs
index 765a07646c6..dcd629f4336 100644
--- a/crates/router/src/connector/cryptopay.rs
+++ b/crates/hyperswitch_connectors/src/connectors/cryptopay.rs
@@ -4,35 +4,44 @@ use base64::Engine;
 use common_utils::{
     crypto::{self, GenerateDigest, SignMessage},
     date_time,
+    errors::CustomResult,
     ext_traits::ByteSliceExt,
-    request::RequestContent,
+    request::{Method, Request, RequestBuilder, RequestContent},
     types::{AmountConvertor, StringMajorUnit, StringMajorUnitForConnector},
 };
 use error_stack::ResultExt;
 use hex::encode;
-use masking::PeekInterface;
+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::{PaymentsAuthorizeRouterData, PaymentsSyncRouterData},
+};
+use hyperswitch_interfaces::{
+    api::{self, ConnectorCommon, ConnectorCommonExt, ConnectorIntegration, ConnectorValidation},
+    configs::Connectors,
+    errors,
+    events::connector_api_logs::ConnectorEvent,
+    types::{PaymentsAuthorizeType, PaymentsSyncType, Response},
+    webhooks,
+};
+use masking::{Mask, PeekInterface};
 use transformers as cryptopay;
 
 use self::cryptopay::CryptopayWebhookDetails;
-use super::utils;
 use crate::{
-    configs::settings,
-    consts,
-    core::errors::{self, CustomResult},
-    events::connector_api_logs::ConnectorEvent,
-    headers,
-    services::{
-        self,
-        request::{self, Mask},
-        ConnectorIntegration, ConnectorValidation,
-    },
-    types::{
-        self,
-        api::{self, ConnectorCommon, ConnectorCommonExt},
-        transformers::ForeignTryFrom,
-        ErrorResponse, Response,
-    },
-    utils::BytesExt,
+    constants::headers,
+    types::ResponseRouterData,
+    utils::{self, ForeignTryFrom},
 };
 
 #[derive(Clone)]
@@ -61,12 +70,8 @@ impl api::RefundExecute for Cryptopay {}
 impl api::RefundSync for Cryptopay {}
 impl api::PaymentToken for Cryptopay {}
 
-impl
-    ConnectorIntegration<
-        api::PaymentMethodToken,
-        types::PaymentMethodTokenizationData,
-        types::PaymentsResponseData,
-    > for Cryptopay
+impl ConnectorIntegration<PaymentMethodToken, PaymentMethodTokenizationData, PaymentsResponseData>
+    for Cryptopay
 {
     // Not Implemented (R)
 }
@@ -77,16 +82,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 method = self.get_http_method();
         let payload = match method {
-            common_utils::request::Method::Get => String::default(),
-            common_utils::request::Method::Post
-            | common_utils::request::Method::Put
-            | common_utils::request::Method::Delete
-            | common_utils::request::Method::Patch => {
+            Method::Get => String::default(),
+            Method::Post | Method::Put | Method::Delete | Method::Patch => {
                 let body = self
                     .get_request_body(req, connectors)?
                     .get_inner_value()
@@ -121,7 +123,7 @@ where
         )
         .change_context(errors::ConnectorError::RequestEncodingFailed)
         .attach_printable("Failed to sign the message")?;
-        let authz = consts::BASE64_ENGINE.encode(authz);
+        let authz = common_utils::consts::BASE64_ENGINE.encode(authz);
         let auth_string: String = format!("HMAC {}:{}", auth.api_key.peek(), authz);
 
         let headers = vec![
@@ -152,14 +154,14 @@ impl ConnectorCommon for Cryptopay {
         "application/json"
     }
 
-    fn base_url<'a>(&self, connectors: &'a settings::Connectors) -> &'a str {
+    fn base_url<'a>(&self, connectors: &'a Connectors) -> &'a str {
         connectors.cryptopay.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 = cryptopay::CryptopayAuthType::try_from(auth_type)
             .change_context(errors::ConnectorError::FailedToObtainAuthType)?;
         Ok(vec![(
@@ -192,32 +194,18 @@ impl ConnectorCommon for Cryptopay {
     }
 }
 
-impl ConnectorIntegration<api::Session, types::PaymentsSessionData, types::PaymentsResponseData>
-    for Cryptopay
-{
-}
+impl ConnectorIntegration<Session, PaymentsSessionData, PaymentsResponseData> for Cryptopay {}
 
-impl ConnectorIntegration<api::AccessTokenAuth, types::AccessTokenRequestData, types::AccessToken>
-    for Cryptopay
-{
-}
+impl ConnectorIntegration<AccessTokenAuth, AccessTokenRequestData, AccessToken> for Cryptopay {}
 
-impl
-    ConnectorIntegration<
-        api::SetupMandate,
-        types::SetupMandateRequestData,
-        types::PaymentsResponseData,
-    > for Cryptopay
+impl ConnectorIntegration<SetupMandate, SetupMandateRequestData, PaymentsResponseData>
+    for Cryptopay
 {
     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 Cryptopay".to_string())
                 .into(),
@@ -225,14 +213,12 @@ impl
     }
 }
 
-impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::PaymentsResponseData>
-    for Cryptopay
-{
+impl ConnectorIntegration<Authorize, PaymentsAuthorizeData, PaymentsResponseData> for Cryptopay {
     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)
     }
 
@@ -242,16 +228,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!("{}/api/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 = utils::convert_amount(
             self.amount_converter,
@@ -265,20 +251,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(),
@@ -287,10 +269,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: cryptopay::CryptopayPaymentsResponse = res
             .response
             .parse_struct("Cryptopay PaymentsAuthorizeResponse")
@@ -305,8 +287,8 @@ impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::P
             )?),
             None => None,
         };
-        types::RouterData::foreign_try_from((
-            types::ResponseRouterData {
+        RouterData::foreign_try_from((
+            ResponseRouterData {
                 response,
                 data: data.clone(),
                 http_code: res.status_code,
@@ -327,7 +309,7 @@ impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::P
 impl ConnectorValidation for Cryptopay {
     fn validate_psync_reference_id(
         &self,
-        _data: &hyperswitch_domain_models::router_request_types::PaymentsSyncData,
+        _data: &PaymentsSyncData,
         _is_three_ds: bool,
         _status: common_enums::enums::AttemptStatus,
         _connector_meta_data: Option<common_utils::pii::SecretSerdeValue>,
@@ -337,14 +319,12 @@ impl ConnectorValidation for Cryptopay {
     }
 }
 
-impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsResponseData>
-    for Cryptopay
-{
+impl ConnectorIntegration<PSync, PaymentsSyncData, PaymentsResponseData> for Cryptopay {
     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)
     }
 
@@ -352,14 +332,14 @@ impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsRe
         self.common_get_content_type()
     }
 
-    fn get_http_method(&self) -> services::Method {
-        services::Method::Get
+    fn get_http_method(&self) -> Method {
+        Method::Get
     }
 
     fn get_url(
         &self,
-        req: &types::PaymentsSyncRouterData,
-        connectors: &settings::Connectors,
+        req: &PaymentsSyncRouterData,
+        connectors: &Connectors,
     ) -> CustomResult<String, errors::ConnectorError> {
         let custom_id = req.connector_request_reference_id.clone();
         Ok(format!(
@@ -370,25 +350,25 @@ 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: cryptopay::CryptopayPaymentsResponse = res
             .response
             .parse_struct("cryptopay PaymentsSyncResponse")
@@ -403,8 +383,8 @@ impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsRe
             )?),
             None => None,
         };
-        types::RouterData::foreign_try_from((
-            types::ResponseRouterData {
+        RouterData::foreign_try_from((
+            ResponseRouterData {
                 response,
                 data: data.clone(),
                 http_code: res.status_code,
@@ -422,38 +402,26 @@ impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsRe
     }
 }
 
-impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::PaymentsResponseData>
-    for Cryptopay
-{
-}
+impl ConnectorIntegration<Capture, PaymentsCaptureData, PaymentsResponseData> for Cryptopay {}
 
-impl ConnectorIntegration<api::Void, types::PaymentsCancelData, types::PaymentsResponseData>
-    for Cryptopay
-{
-}
+impl ConnectorIntegration<Void, PaymentsCancelData, PaymentsResponseData> for Cryptopay {}
 
-impl ConnectorIntegration<api::Execute, types::RefundsData, types::RefundsResponseData>
-    for Cryptopay
-{
-}
+impl ConnectorIntegration<Execute, RefundsData, RefundsResponseData> for Cryptopay {}
 
-impl ConnectorIntegration<api::RSync, types::RefundsData, types::RefundsResponseData>
-    for Cryptopay
-{
-}
+impl ConnectorIntegration<RSync, RefundsData, RefundsResponseData> for Cryptopay {}
 
 #[async_trait::async_trait]
-impl api::IncomingWebhook for Cryptopay {
+impl webhooks::IncomingWebhook for Cryptopay {
     fn get_webhook_source_verification_algorithm(
         &self,
-        _request: &api::IncomingWebhookRequestDetails<'_>,
+        _request: &webhooks::IncomingWebhookRequestDetails<'_>,
     ) -> CustomResult<Box<dyn crypto::VerifySignature + Send>, errors::ConnectorError> {
         Ok(Box::new(crypto::HmacSha256))
     }
 
     fn get_webhook_source_verification_signature(
         &self,
-        request: &api::IncomingWebhookRequestDetails<'_>,
+        request: &webhooks::IncomingWebhookRequestDetails<'_>,
         _connector_webhook_secrets: &api_models::webhooks::ConnectorWebhookSecrets,
     ) -> CustomResult<Vec<u8>, errors::ConnectorError> {
         let base64_signature =
@@ -464,7 +432,7 @@ impl api::IncomingWebhook for Cryptopay {
 
     fn get_webhook_source_verification_message(
         &self,
-        request: &api::IncomingWebhookRequestDetails<'_>,
+        request: &webhooks::IncomingWebhookRequestDetails<'_>,
         _merchant_id: &common_utils::id_type::MerchantId,
         _connector_webhook_secrets: &api_models::webhooks::ConnectorWebhookSecrets,
     ) -> CustomResult<Vec<u8>, errors::ConnectorError> {
@@ -475,7 +443,7 @@ impl api::IncomingWebhook for Cryptopay {
 
     fn get_webhook_object_reference_id(
         &self,
-        request: &api::IncomingWebhookRequestDetails<'_>,
+        request: &webhooks::IncomingWebhookRequestDetails<'_>,
     ) -> CustomResult<api_models::webhooks::ObjectReferenceId, errors::ConnectorError> {
         let notif: CryptopayWebhookDetails =
             request
@@ -494,8 +462,8 @@ impl api::IncomingWebhook for Cryptopay {
 
     fn get_webhook_event_type(
         &self,
-        request: &api::IncomingWebhookRequestDetails<'_>,
-    ) -> CustomResult<api::IncomingWebhookEvent, errors::ConnectorError> {
+        request: &webhooks::IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<api_models::webhooks::IncomingWebhookEvent, errors::ConnectorError> {
         let notif: CryptopayWebhookDetails =
             request
                 .body
@@ -503,21 +471,21 @@ impl api::IncomingWebhook for Cryptopay {
                 .change_context(errors::ConnectorError::WebhookEventTypeNotFound)?;
         match notif.data.status {
             cryptopay::CryptopayPaymentStatus::Completed => {
-                Ok(api::IncomingWebhookEvent::PaymentIntentSuccess)
+                Ok(api_models::webhooks::IncomingWebhookEvent::PaymentIntentSuccess)
             }
             cryptopay::CryptopayPaymentStatus::Unresolved => {
-                Ok(api::IncomingWebhookEvent::PaymentActionRequired)
+                Ok(api_models::webhooks::IncomingWebhookEvent::PaymentActionRequired)
             }
             cryptopay::CryptopayPaymentStatus::Cancelled => {
-                Ok(api::IncomingWebhookEvent::PaymentIntentFailure)
+                Ok(api_models::webhooks::IncomingWebhookEvent::PaymentIntentFailure)
             }
-            _ => Ok(api::IncomingWebhookEvent::EventNotSupported),
+            _ => 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> {
         let notif: CryptopayWebhookDetails =
             request
diff --git a/crates/router/src/connector/cryptopay/transformers.rs b/crates/hyperswitch_connectors/src/connectors/cryptopay/transformers.rs
similarity index 76%
rename from crates/router/src/connector/cryptopay/transformers.rs
rename to crates/hyperswitch_connectors/src/connectors/cryptopay/transformers.rs
index cd22890ca52..03a585f76bd 100644
--- a/crates/router/src/connector/cryptopay/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/cryptopay/transformers.rs
@@ -1,17 +1,23 @@
+use common_enums::enums;
 use common_utils::{
     pii,
     types::{MinorUnit, StringMajorUnit},
 };
+use hyperswitch_domain_models::{
+    payment_method_data::PaymentMethodData,
+    router_data::{ConnectorAuthType, ErrorResponse, RouterData},
+    router_request_types::ResponseId,
+    router_response_types::{PaymentsResponseData, RedirectForm},
+    types,
+};
+use hyperswitch_interfaces::{consts, errors};
 use masking::Secret;
 use reqwest::Url;
 use serde::{Deserialize, Serialize};
 
 use crate::{
-    connector::utils::{self, is_payment_failure, CryptoData, PaymentsAuthorizeRequestData},
-    consts,
-    core::errors,
-    services,
-    types::{self, domain, storage::enums, transformers::ForeignTryFrom},
+    types::ResponseRouterData,
+    utils::{self, CryptoData, ForeignTryFrom, PaymentsAuthorizeRequestData},
 };
 
 #[derive(Debug, Serialize)]
@@ -51,7 +57,7 @@ impl TryFrom<&CryptopayRouterData<&types::PaymentsAuthorizeRouterData>>
         item: &CryptopayRouterData<&types::PaymentsAuthorizeRouterData>,
     ) -> Result<Self, Self::Error> {
         let cryptopay_request = match item.router_data.request.payment_method_data {
-            domain::PaymentMethodData::Crypto(ref cryptodata) => {
+            PaymentMethodData::Crypto(ref cryptodata) => {
                 let pay_currency = cryptodata.get_pay_currency()?;
                 Ok(Self {
                     price_amount: item.amount.clone(),
@@ -65,26 +71,24 @@ impl TryFrom<&CryptopayRouterData<&types::PaymentsAuthorizeRouterData>>
                     custom_id: item.router_data.connector_request_reference_id.clone(),
                 })
             }
-            domain::PaymentMethodData::Card(_)
-            | domain::PaymentMethodData::CardRedirect(_)
-            | domain::PaymentMethodData::Wallet(_)
-            | domain::PaymentMethodData::PayLater(_)
-            | domain::PaymentMethodData::BankRedirect(_)
-            | domain::PaymentMethodData::BankDebit(_)
-            | domain::PaymentMethodData::BankTransfer(_)
-            | domain::PaymentMethodData::MandatePayment {}
-            | domain::PaymentMethodData::Reward {}
-            | domain::PaymentMethodData::RealTimePayment(_)
-            | domain::PaymentMethodData::Upi(_)
-            | domain::PaymentMethodData::Voucher(_)
-            | domain::PaymentMethodData::GiftCard(_)
-            | domain::PaymentMethodData::OpenBanking(_)
-            | domain::PaymentMethodData::CardToken(_)
-            | domain::PaymentMethodData::NetworkToken(_) => {
-                Err(errors::ConnectorError::NotImplemented(
-                    utils::get_unimplemented_payment_method_error_message("CryptoPay"),
-                ))
-            }
+            PaymentMethodData::Card(_)
+            | PaymentMethodData::CardRedirect(_)
+            | PaymentMethodData::Wallet(_)
+            | PaymentMethodData::PayLater(_)
+            | PaymentMethodData::BankRedirect(_)
+            | PaymentMethodData::BankDebit(_)
+            | PaymentMethodData::BankTransfer(_)
+            | PaymentMethodData::MandatePayment {}
+            | PaymentMethodData::Reward {}
+            | PaymentMethodData::RealTimePayment(_)
+            | PaymentMethodData::Upi(_)
+            | PaymentMethodData::Voucher(_)
+            | PaymentMethodData::GiftCard(_)
+            | PaymentMethodData::OpenBanking(_)
+            | PaymentMethodData::CardToken(_)
+            | PaymentMethodData::NetworkToken(_) => Err(errors::ConnectorError::NotImplemented(
+                utils::get_unimplemented_payment_method_error_message("CryptoPay"),
+            )),
         }?;
         Ok(cryptopay_request)
     }
@@ -96,10 +100,10 @@ pub struct CryptopayAuthType {
     pub(super) api_secret: Secret<String>,
 }
 
-impl TryFrom<&types::ConnectorAuthType> for CryptopayAuthType {
+impl TryFrom<&ConnectorAuthType> for CryptopayAuthType {
     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 {
             Ok(Self {
                 api_key: api_key.to_owned(),
                 api_secret: key1.to_owned(),
@@ -140,21 +144,21 @@ pub struct CryptopayPaymentsResponse {
 
 impl<F, T>
     ForeignTryFrom<(
-        types::ResponseRouterData<F, CryptopayPaymentsResponse, T, types::PaymentsResponseData>,
+        ResponseRouterData<F, CryptopayPaymentsResponse, T, PaymentsResponseData>,
         Option<MinorUnit>,
-    )> for types::RouterData<F, T, types::PaymentsResponseData>
+    )> for RouterData<F, T, PaymentsResponseData>
 {
     type Error = error_stack::Report<errors::ConnectorError>;
     fn foreign_try_from(
         (item, amount_captured_in_minor_units): (
-            types::ResponseRouterData<F, CryptopayPaymentsResponse, T, types::PaymentsResponseData>,
+            ResponseRouterData<F, CryptopayPaymentsResponse, T, PaymentsResponseData>,
             Option<MinorUnit>,
         ),
     ) -> Result<Self, Self::Error> {
         let status = enums::AttemptStatus::from(item.response.data.status.clone());
-        let response = if is_payment_failure(status) {
+        let response = if utils::is_payment_failure(status) {
             let payment_response = &item.response.data;
-            Err(types::ErrorResponse {
+            Err(ErrorResponse {
                 code: payment_response
                     .name
                     .clone()
@@ -173,11 +177,9 @@ impl<F, T>
                 .response
                 .data
                 .hosted_page_url
-                .map(|x| services::RedirectForm::from((x, services::Method::Get)));
-            Ok(types::PaymentsResponseData::TransactionResponse {
-                resource_id: types::ResponseId::ConnectorTransactionId(
-                    item.response.data.id.clone(),
-                ),
+                .map(|x| RedirectForm::from((x, common_utils::request::Method::Get)));
+            Ok(PaymentsResponseData::TransactionResponse {
+                resource_id: ResponseId::ConnectorTransactionId(item.response.data.id.clone()),
                 redirection_data,
                 mandate_reference: None,
                 connector_metadata: None,
diff --git a/crates/hyperswitch_connectors/src/connectors/volt/transformers.rs b/crates/hyperswitch_connectors/src/connectors/volt/transformers.rs
index 1093ef4e6f0..953b6316ff8 100644
--- a/crates/hyperswitch_connectors/src/connectors/volt/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/volt/transformers.rs
@@ -14,7 +14,7 @@ use serde::{Deserialize, Serialize};
 
 use crate::{
     types::{RefreshTokenRouterData, RefundsResponseRouterData, ResponseRouterData},
-    utils::{self, AddressDetailsData, RouterData as _},
+    utils::{self, is_payment_failure, AddressDetailsData, RouterData as _},
 };
 
 const PASSWORD: &str = "password";
@@ -605,32 +605,3 @@ pub struct VoltErrorList {
     pub property: String,
     pub message: String,
 }
-
-fn is_payment_failure(status: enums::AttemptStatus) -> bool {
-    match status {
-        common_enums::AttemptStatus::AuthenticationFailed
-        | common_enums::AttemptStatus::AuthorizationFailed
-        | common_enums::AttemptStatus::CaptureFailed
-        | common_enums::AttemptStatus::VoidFailed
-        | common_enums::AttemptStatus::Failure => true,
-        common_enums::AttemptStatus::Started
-        | common_enums::AttemptStatus::RouterDeclined
-        | common_enums::AttemptStatus::AuthenticationPending
-        | common_enums::AttemptStatus::AuthenticationSuccessful
-        | common_enums::AttemptStatus::Authorized
-        | common_enums::AttemptStatus::Charged
-        | common_enums::AttemptStatus::Authorizing
-        | common_enums::AttemptStatus::CodInitiated
-        | common_enums::AttemptStatus::Voided
-        | common_enums::AttemptStatus::VoidInitiated
-        | common_enums::AttemptStatus::CaptureInitiated
-        | common_enums::AttemptStatus::AutoRefunded
-        | common_enums::AttemptStatus::PartialCharged
-        | common_enums::AttemptStatus::PartialChargedAndChargeable
-        | common_enums::AttemptStatus::Unresolved
-        | common_enums::AttemptStatus::Pending
-        | common_enums::AttemptStatus::PaymentMethodAwaited
-        | common_enums::AttemptStatus::ConfirmationAwaited
-        | common_enums::AttemptStatus::DeviceDataCollectionPending => false,
-    }
-}
diff --git a/crates/hyperswitch_connectors/src/constants.rs b/crates/hyperswitch_connectors/src/constants.rs
index c5ca6512a34..4c27e11fc45 100644
--- a/crates/hyperswitch_connectors/src/constants.rs
+++ b/crates/hyperswitch_connectors/src/constants.rs
@@ -10,6 +10,8 @@ pub(crate) mod headers {
     pub(crate) const MERCHANT_ID: &str = "Merchant-ID";
     pub(crate) const TIMESTAMP: &str = "Timestamp";
     pub(crate) const X_ACCEPT_VERSION: &str = "X-Accept-Version";
+    pub(crate) const X_CC_API_KEY: &str = "X-CC-Api-Key";
+    pub(crate) const X_CC_VERSION: &str = "X-CC-Version";
     pub(crate) const X_NN_ACCESS_KEY: &str = "X-NN-Access-Key";
     pub(crate) const X_RANDOM_VALUE: &str = "X-RandomValue";
     pub(crate) const X_REQUEST_DATE: &str = "X-RequestDate";
diff --git a/crates/hyperswitch_connectors/src/default_implementations.rs b/crates/hyperswitch_connectors/src/default_implementations.rs
index a667c5ddc3c..31052ab0df2 100644
--- a/crates/hyperswitch_connectors/src/default_implementations.rs
+++ b/crates/hyperswitch_connectors/src/default_implementations.rs
@@ -91,6 +91,9 @@ macro_rules! default_imp_for_authorize_session_token {
 default_imp_for_authorize_session_token!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -126,6 +129,9 @@ macro_rules! default_imp_for_calculate_tax {
 default_imp_for_calculate_tax!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Fiserv,
     connectors::Fiservemea,
     connectors::Helcim,
@@ -160,6 +166,9 @@ macro_rules! default_imp_for_session_update {
 default_imp_for_session_update!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Fiserv,
     connectors::Fiservemea,
     connectors::Helcim,
@@ -196,6 +205,9 @@ macro_rules! default_imp_for_complete_authorize {
 
 default_imp_for_complete_authorize!(
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Fiserv,
     connectors::Fiservemea,
     connectors::Fiuu,
@@ -229,6 +241,9 @@ macro_rules! default_imp_for_incremental_authorization {
 default_imp_for_incremental_authorization!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -265,6 +280,9 @@ macro_rules! default_imp_for_create_customer {
 default_imp_for_create_customer!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -301,6 +319,9 @@ macro_rules! default_imp_for_connector_redirect_response {
 
 default_imp_for_connector_redirect_response!(
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -335,6 +356,9 @@ macro_rules! default_imp_for_pre_processing_steps{
 default_imp_for_pre_processing_steps!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -371,6 +395,9 @@ macro_rules! default_imp_for_post_processing_steps{
 default_imp_for_post_processing_steps!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -407,6 +434,9 @@ macro_rules! default_imp_for_approve {
 default_imp_for_approve!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -443,6 +473,9 @@ macro_rules! default_imp_for_reject {
 default_imp_for_reject!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -479,6 +512,9 @@ macro_rules! default_imp_for_webhook_source_verification {
 default_imp_for_webhook_source_verification!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -516,6 +552,9 @@ macro_rules! default_imp_for_accept_dispute {
 default_imp_for_accept_dispute!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -552,6 +591,9 @@ macro_rules! default_imp_for_submit_evidence {
 default_imp_for_submit_evidence!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -588,6 +630,9 @@ macro_rules! default_imp_for_defend_dispute {
 default_imp_for_defend_dispute!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -633,6 +678,9 @@ macro_rules! default_imp_for_file_upload {
 default_imp_for_file_upload!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -671,6 +719,9 @@ macro_rules! default_imp_for_payouts_create {
 default_imp_for_payouts_create!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -709,6 +760,9 @@ macro_rules! default_imp_for_payouts_retrieve {
 default_imp_for_payouts_retrieve!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -747,6 +801,9 @@ macro_rules! default_imp_for_payouts_eligibility {
 default_imp_for_payouts_eligibility!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -785,6 +842,9 @@ macro_rules! default_imp_for_payouts_fulfill {
 default_imp_for_payouts_fulfill!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -823,6 +883,9 @@ macro_rules! default_imp_for_payouts_cancel {
 default_imp_for_payouts_cancel!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -861,6 +924,9 @@ macro_rules! default_imp_for_payouts_quote {
 default_imp_for_payouts_quote!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -899,6 +965,9 @@ macro_rules! default_imp_for_payouts_recipient {
 default_imp_for_payouts_recipient!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -937,6 +1006,9 @@ macro_rules! default_imp_for_payouts_recipient_account {
 default_imp_for_payouts_recipient_account!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -975,6 +1047,9 @@ macro_rules! default_imp_for_frm_sale {
 default_imp_for_frm_sale!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -1013,6 +1088,9 @@ macro_rules! default_imp_for_frm_checkout {
 default_imp_for_frm_checkout!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -1051,6 +1129,9 @@ macro_rules! default_imp_for_frm_transaction {
 default_imp_for_frm_transaction!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -1089,6 +1170,9 @@ macro_rules! default_imp_for_frm_fulfillment {
 default_imp_for_frm_fulfillment!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -1127,6 +1211,9 @@ macro_rules! default_imp_for_frm_record_return {
 default_imp_for_frm_record_return!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -1162,6 +1249,9 @@ macro_rules! default_imp_for_revoking_mandates {
 default_imp_for_revoking_mandates!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
diff --git a/crates/hyperswitch_connectors/src/default_implementations_v2.rs b/crates/hyperswitch_connectors/src/default_implementations_v2.rs
index 3bb1abfef21..16e592688ac 100644
--- a/crates/hyperswitch_connectors/src/default_implementations_v2.rs
+++ b/crates/hyperswitch_connectors/src/default_implementations_v2.rs
@@ -198,6 +198,9 @@ macro_rules! default_imp_for_new_connector_integration_payment {
 default_imp_for_new_connector_integration_payment!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -235,6 +238,9 @@ macro_rules! default_imp_for_new_connector_integration_refund {
 default_imp_for_new_connector_integration_refund!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -267,6 +273,9 @@ 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::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -305,6 +314,9 @@ macro_rules! default_imp_for_new_connector_integration_accept_dispute {
 default_imp_for_new_connector_integration_accept_dispute!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -342,6 +354,9 @@ macro_rules! default_imp_for_new_connector_integration_submit_evidence {
 default_imp_for_new_connector_integration_submit_evidence!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -379,6 +394,9 @@ macro_rules! default_imp_for_new_connector_integration_defend_dispute {
 default_imp_for_new_connector_integration_defend_dispute!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -426,6 +444,9 @@ macro_rules! default_imp_for_new_connector_integration_file_upload {
 default_imp_for_new_connector_integration_file_upload!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -465,6 +486,9 @@ macro_rules! default_imp_for_new_connector_integration_payouts_create {
 default_imp_for_new_connector_integration_payouts_create!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -504,6 +528,9 @@ macro_rules! default_imp_for_new_connector_integration_payouts_eligibility {
 default_imp_for_new_connector_integration_payouts_eligibility!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -543,6 +570,9 @@ macro_rules! default_imp_for_new_connector_integration_payouts_fulfill {
 default_imp_for_new_connector_integration_payouts_fulfill!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -582,6 +612,9 @@ macro_rules! default_imp_for_new_connector_integration_payouts_cancel {
 default_imp_for_new_connector_integration_payouts_cancel!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -621,6 +654,9 @@ macro_rules! default_imp_for_new_connector_integration_payouts_quote {
 default_imp_for_new_connector_integration_payouts_quote!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -660,6 +696,9 @@ macro_rules! default_imp_for_new_connector_integration_payouts_recipient {
 default_imp_for_new_connector_integration_payouts_recipient!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -699,6 +738,9 @@ macro_rules! default_imp_for_new_connector_integration_payouts_sync {
 default_imp_for_new_connector_integration_payouts_sync!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -738,6 +780,9 @@ macro_rules! default_imp_for_new_connector_integration_payouts_recipient_account
 default_imp_for_new_connector_integration_payouts_recipient_account!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -775,6 +820,9 @@ 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::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -814,6 +862,9 @@ macro_rules! default_imp_for_new_connector_integration_frm_sale {
 default_imp_for_new_connector_integration_frm_sale!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -853,6 +904,9 @@ macro_rules! default_imp_for_new_connector_integration_frm_checkout {
 default_imp_for_new_connector_integration_frm_checkout!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -892,6 +946,9 @@ macro_rules! default_imp_for_new_connector_integration_frm_transaction {
 default_imp_for_new_connector_integration_frm_transaction!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -931,6 +988,9 @@ macro_rules! default_imp_for_new_connector_integration_frm_fulfillment {
 default_imp_for_new_connector_integration_frm_fulfillment!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -970,6 +1030,9 @@ macro_rules! default_imp_for_new_connector_integration_frm_record_return {
 default_imp_for_new_connector_integration_frm_record_return!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
@@ -1006,6 +1069,9 @@ macro_rules! default_imp_for_new_connector_integration_revoking_mandates {
 default_imp_for_new_connector_integration_revoking_mandates!(
     connectors::Bambora,
     connectors::Bitpay,
+    connectors::Cashtocode,
+    connectors::Coinbase,
+    connectors::Cryptopay,
     connectors::Deutschebank,
     connectors::Fiserv,
     connectors::Fiservemea,
diff --git a/crates/hyperswitch_connectors/src/utils.rs b/crates/hyperswitch_connectors/src/utils.rs
index b2979975e55..f96d715f5be 100644
--- a/crates/hyperswitch_connectors/src/utils.rs
+++ b/crates/hyperswitch_connectors/src/utils.rs
@@ -4,7 +4,7 @@ use api_models::payments::{self, Address, AddressDetails, OrderDetailsWithAmount
 use base64::Engine;
 use common_enums::{
     enums,
-    enums::{CanadaStatesAbbreviation, FutureUsage, UsStatesAbbreviation},
+    enums::{AttemptStatus, CanadaStatesAbbreviation, FutureUsage, UsStatesAbbreviation},
 };
 use common_utils::{
     consts::BASE64_ENGINE,
@@ -163,6 +163,35 @@ pub(crate) fn convert_back_amount_to_minor_units<T>(
         .change_context(errors::ConnectorError::AmountConversionFailed)
 }
 
+pub(crate) fn is_payment_failure(status: AttemptStatus) -> bool {
+    match status {
+        AttemptStatus::AuthenticationFailed
+        | AttemptStatus::AuthorizationFailed
+        | AttemptStatus::CaptureFailed
+        | AttemptStatus::VoidFailed
+        | AttemptStatus::Failure => true,
+        AttemptStatus::Started
+        | AttemptStatus::RouterDeclined
+        | AttemptStatus::AuthenticationPending
+        | AttemptStatus::AuthenticationSuccessful
+        | AttemptStatus::Authorized
+        | AttemptStatus::Charged
+        | AttemptStatus::Authorizing
+        | AttemptStatus::CodInitiated
+        | AttemptStatus::Voided
+        | AttemptStatus::VoidInitiated
+        | AttemptStatus::CaptureInitiated
+        | AttemptStatus::AutoRefunded
+        | AttemptStatus::PartialCharged
+        | AttemptStatus::PartialChargedAndChargeable
+        | AttemptStatus::Unresolved
+        | AttemptStatus::Pending
+        | AttemptStatus::PaymentMethodAwaited
+        | AttemptStatus::ConfirmationAwaited
+        | AttemptStatus::DeviceDataCollectionPending => false,
+    }
+}
+
 // TODO: Make all traits as `pub(crate) trait` once all connectors are moved.
 pub trait RouterData {
     fn get_billing(&self) -> Result<&Address, Error>;
@@ -1460,6 +1489,18 @@ fn get_header_field(
         ))?
 }
 
+pub trait CryptoData {
+    fn get_pay_currency(&self) -> Result<String, Error>;
+}
+
+impl CryptoData for hyperswitch_domain_models::payment_method_data::CryptoData {
+    fn get_pay_currency(&self) -> Result<String, Error> {
+        self.pay_currency
+            .clone()
+            .ok_or_else(missing_field_err("crypto_data.pay_currency"))
+    }
+}
+
 #[macro_export]
 macro_rules! unimplemented_payment_method {
     ($payment_method:expr, $connector:expr) => {
diff --git a/crates/router/src/connector.rs b/crates/router/src/connector.rs
index b505f8c8c52..116fc67320f 100644
--- a/crates/router/src/connector.rs
+++ b/crates/router/src/connector.rs
@@ -9,10 +9,7 @@ pub mod billwerk;
 pub mod bluesnap;
 pub mod boku;
 pub mod braintree;
-pub mod cashtocode;
 pub mod checkout;
-pub mod coinbase;
-pub mod cryptopay;
 pub mod cybersource;
 pub mod datatrans;
 pub mod dlocal;
@@ -62,12 +59,13 @@ pub mod zen;
 pub mod zsl;
 
 pub use hyperswitch_connectors::connectors::{
-    bambora, bambora::Bambora, bitpay, bitpay::Bitpay, deutschebank, deutschebank::Deutschebank,
-    fiserv, fiserv::Fiserv, fiservemea, fiservemea::Fiservemea, fiuu, fiuu::Fiuu, globepay,
-    globepay::Globepay, helcim, helcim::Helcim, mollie, mollie::Mollie, nexixpay,
-    nexixpay::Nexixpay, novalnet, novalnet::Novalnet, powertranz, powertranz::Powertranz, stax,
-    stax::Stax, taxjar, taxjar::Taxjar, thunes, thunes::Thunes, tsys, tsys::Tsys, volt, volt::Volt,
-    worldline, worldline::Worldline,
+    bambora, bambora::Bambora, bitpay, bitpay::Bitpay, cashtocode, cashtocode::Cashtocode,
+    coinbase, coinbase::Coinbase, cryptopay, cryptopay::Cryptopay, deutschebank,
+    deutschebank::Deutschebank, fiserv, fiserv::Fiserv, fiservemea, fiservemea::Fiservemea, fiuu,
+    fiuu::Fiuu, globepay, globepay::Globepay, helcim, helcim::Helcim, mollie, mollie::Mollie,
+    nexixpay, nexixpay::Nexixpay, novalnet, novalnet::Novalnet, powertranz, powertranz::Powertranz,
+    stax, stax::Stax, taxjar, taxjar::Taxjar, thunes, thunes::Thunes, tsys, tsys::Tsys, volt,
+    volt::Volt, worldline, worldline::Worldline,
 };
 
 #[cfg(feature = "dummy_connector")]
@@ -75,8 +73,7 @@ pub use self::dummyconnector::DummyConnector;
 pub use self::{
     aci::Aci, adyen::Adyen, adyenplatform::Adyenplatform, airwallex::Airwallex,
     authorizedotnet::Authorizedotnet, bamboraapac::Bamboraapac, bankofamerica::Bankofamerica,
-    billwerk::Billwerk, bluesnap::Bluesnap, boku::Boku, braintree::Braintree,
-    cashtocode::Cashtocode, checkout::Checkout, coinbase::Coinbase, cryptopay::Cryptopay,
+    billwerk::Billwerk, bluesnap::Bluesnap, boku::Boku, braintree::Braintree, checkout::Checkout,
     cybersource::Cybersource, datatrans::Datatrans, dlocal::Dlocal, ebanx::Ebanx, forte::Forte,
     globalpay::Globalpay, gocardless::Gocardless, gpayments::Gpayments, iatapay::Iatapay,
     itaubank::Itaubank, klarna::Klarna, mifinity::Mifinity, multisafepay::Multisafepay,
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 041b5bb7359..3ff93cf9bf0 100644
--- a/crates/router/src/core/payments/connector_integration_v2_impls.rs
+++ b/crates/router/src/core/payments/connector_integration_v2_impls.rs
@@ -682,10 +682,7 @@ default_imp_for_new_connector_integration_payment!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -760,10 +757,7 @@ default_imp_for_new_connector_integration_refund!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -832,10 +826,7 @@ default_imp_for_new_connector_integration_connector_access_token!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -926,10 +917,7 @@ default_imp_for_new_connector_integration_accept_dispute!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -1002,10 +990,7 @@ default_imp_for_new_connector_integration_defend_dispute!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -1062,10 +1047,7 @@ default_imp_for_new_connector_integration_submit_evidence!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -1149,10 +1131,7 @@ default_imp_for_new_connector_integration_file_upload!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -1315,10 +1294,7 @@ default_imp_for_new_connector_integration_payouts_create!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -1394,10 +1370,7 @@ default_imp_for_new_connector_integration_payouts_eligibility!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -1473,10 +1446,7 @@ default_imp_for_new_connector_integration_payouts_fulfill!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -1552,10 +1522,7 @@ default_imp_for_new_connector_integration_payouts_cancel!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -1631,10 +1598,7 @@ default_imp_for_new_connector_integration_payouts_quote!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -1710,10 +1674,7 @@ default_imp_for_new_connector_integration_payouts_recipient!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -1789,10 +1750,7 @@ default_imp_for_new_connector_integration_payouts_sync!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -1868,10 +1826,7 @@ default_imp_for_new_connector_integration_payouts_recipient_account!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -1945,10 +1900,7 @@ default_imp_for_new_connector_integration_webhook_source_verification!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -2111,10 +2063,7 @@ default_imp_for_new_connector_integration_frm_sale!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -2190,10 +2139,7 @@ default_imp_for_new_connector_integration_frm_checkout!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -2269,10 +2215,7 @@ default_imp_for_new_connector_integration_frm_transaction!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -2348,10 +2291,7 @@ default_imp_for_new_connector_integration_frm_fulfillment!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -2427,10 +2367,7 @@ default_imp_for_new_connector_integration_frm_record_return!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -2503,10 +2440,7 @@ default_imp_for_new_connector_integration_revoking_mandates!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
diff --git a/crates/router/src/core/payments/flows.rs b/crates/router/src/core/payments/flows.rs
index e364d662e24..f9a6b461a13 100644
--- a/crates/router/src/core/payments/flows.rs
+++ b/crates/router/src/core/payments/flows.rs
@@ -209,10 +209,7 @@ default_imp_for_complete_authorize!(
     connector::Bankofamerica,
     connector::Billwerk,
     connector::Boku,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Coinbase,
-    connector::Cryptopay,
     connector::Datatrans,
     connector::Dlocal,
     connector::Ebanx,
@@ -288,10 +285,7 @@ default_imp_for_webhook_source_verification!(
     connector::Bluesnap,
     connector::Braintree,
     connector::Boku,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Coinbase,
-    connector::Cryptopay,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -376,10 +370,7 @@ default_imp_for_create_customer!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Coinbase,
-    connector::Cryptopay,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -461,9 +452,6 @@ default_imp_for_connector_redirect_response!(
     connector::Bankofamerica,
     connector::Billwerk,
     connector::Boku,
-    connector::Cashtocode,
-    connector::Coinbase,
-    connector::Cryptopay,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -630,9 +618,6 @@ default_imp_for_accept_dispute!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
-    connector::Coinbase,
-    connector::Cryptopay,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -739,9 +724,6 @@ default_imp_for_file_upload!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
-    connector::Coinbase,
-    connector::Cryptopay,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -825,10 +807,7 @@ default_imp_for_submit_evidence!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Cybersource,
-    connector::Coinbase,
-    connector::Cryptopay,
     connector::Datatrans,
     connector::Dlocal,
     connector::Ebanx,
@@ -911,10 +890,7 @@ default_imp_for_defend_dispute!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Cybersource,
-    connector::Coinbase,
-    connector::Cryptopay,
     connector::Datatrans,
     connector::Dlocal,
     connector::Ebanx,
@@ -1012,10 +988,7 @@ default_imp_for_pre_processing_steps!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Coinbase,
-    connector::Cryptopay,
     connector::Datatrans,
     connector::Dlocal,
     connector::Ebanx,
@@ -1086,10 +1059,7 @@ default_imp_for_post_processing_steps!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Coinbase,
-    connector::Cryptopay,
     connector::Datatrans,
     connector::Dlocal,
     connector::Ebanx,
@@ -1247,11 +1217,8 @@ default_imp_for_payouts_create!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
     connector::Cybersource,
-    connector::Coinbase,
     connector::Datatrans,
     connector::Dlocal,
     connector::Forte,
@@ -1333,10 +1300,7 @@ default_imp_for_payouts_retrieve!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -1424,11 +1388,8 @@ default_imp_for_payouts_eligibility!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
     connector::Cybersource,
-    connector::Coinbase,
     connector::Datatrans,
     connector::Dlocal,
     connector::Forte,
@@ -1510,10 +1471,7 @@ default_imp_for_payouts_fulfill!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Datatrans,
     connector::Dlocal,
     connector::Forte,
@@ -1593,11 +1551,8 @@ default_imp_for_payouts_cancel!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
     connector::Cybersource,
-    connector::Coinbase,
     connector::Datatrans,
     connector::Dlocal,
     connector::Forte,
@@ -1680,11 +1635,8 @@ default_imp_for_payouts_quote!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
     connector::Cybersource,
-    connector::Coinbase,
     connector::Datatrans,
     connector::Dlocal,
     connector::Forte,
@@ -1768,11 +1720,8 @@ default_imp_for_payouts_recipient!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
     connector::Cybersource,
-    connector::Coinbase,
     connector::Datatrans,
     connector::Dlocal,
     connector::Forte,
@@ -1858,11 +1807,8 @@ default_imp_for_payouts_recipient_account!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
     connector::Cybersource,
-    connector::Coinbase,
     connector::Datatrans,
     connector::Dlocal,
     connector::Ebanx,
@@ -1946,11 +1892,8 @@ default_imp_for_approve!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
     connector::Cybersource,
-    connector::Coinbase,
     connector::Datatrans,
     connector::Dlocal,
     connector::Ebanx,
@@ -2035,11 +1978,8 @@ default_imp_for_reject!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
     connector::Cybersource,
-    connector::Coinbase,
     connector::Datatrans,
     connector::Dlocal,
     connector::Ebanx,
@@ -2214,11 +2154,8 @@ default_imp_for_frm_sale!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
     connector::Cybersource,
-    connector::Coinbase,
     connector::Datatrans,
     connector::Dlocal,
     connector::Ebanx,
@@ -2303,11 +2240,8 @@ default_imp_for_frm_checkout!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
     connector::Cybersource,
-    connector::Coinbase,
     connector::Datatrans,
     connector::Dlocal,
     connector::Ebanx,
@@ -2392,11 +2326,8 @@ default_imp_for_frm_transaction!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
     connector::Cybersource,
-    connector::Coinbase,
     connector::Datatrans,
     connector::Dlocal,
     connector::Ebanx,
@@ -2481,11 +2412,8 @@ default_imp_for_frm_fulfillment!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
     connector::Cybersource,
-    connector::Coinbase,
     connector::Datatrans,
     connector::Dlocal,
     connector::Ebanx,
@@ -2570,11 +2498,8 @@ default_imp_for_frm_record_return!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
     connector::Cybersource,
-    connector::Coinbase,
     connector::Datatrans,
     connector::Dlocal,
     connector::Ebanx,
@@ -2657,10 +2582,7 @@ default_imp_for_incremental_authorization!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Datatrans,
     connector::Dlocal,
     connector::Ebanx,
@@ -2742,10 +2664,7 @@ default_imp_for_revoking_mandates!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Datatrans,
     connector::Dlocal,
     connector::Ebanx,
@@ -2986,10 +2905,7 @@ default_imp_for_authorize_session_token!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -3071,10 +2987,7 @@ default_imp_for_calculate_tax!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,
@@ -3158,10 +3071,7 @@ default_imp_for_session_update!(
     connector::Bluesnap,
     connector::Boku,
     connector::Braintree,
-    connector::Cashtocode,
     connector::Checkout,
-    connector::Cryptopay,
-    connector::Coinbase,
     connector::Cybersource,
     connector::Datatrans,
     connector::Dlocal,

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

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

## Description
<!-- Describe your changes in detail -->


### 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/5629

## 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)?
-->
Cryptopay:
Request:
```
 curl --location 'http://localhost:8080/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_23PxPwqBujt8VbpD0hwiNIqNHY5HNa82ZKPJEfN2Ex2y9CE2RcPNiNCeBMIMBifB' \
--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": {
            "pay_currency": "LTC",
            "network": "litecoin"
        }
    }
}'
```
Response:
```
{
    "payment_id": "pay_D91HEOHsNOK0OJhfM4yo",
    "merchant_id": "merchant_1727096693",
    "status": "requires_customer_action",
    "amount": 300,
    "net_amount": 300,
    "amount_capturable": 300,
    "amount_received": 300,
    "connector": "cryptopay",
    "client_secret": "pay_D91HEOHsNOK0OJhfM4yo_secret_5vTYDEJXX4cI83WnlJ4N",
    "created": "2024-09-23T13:19:07.696Z",
    "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": {
            "pay_currency": "LTC",
            "network": "litecoin"
        },
        "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_D91HEOHsNOK0OJhfM4yo/merchant_1727096693/pay_D91HEOHsNOK0OJhfM4yo_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": "63f933ba-aadb-446b-b80a-58f70abb38e1",
    "frm_message": null,
    "metadata": null,
    "connector_metadata": null,
    "feature_metadata": null,
    "reference_id": "pay_D91HEOHsNOK0OJhfM4yo_1",
    "payment_link": null,
    "profile_id": "pro_1pHVbwpinQ6kPONiCARj",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_RsWL9yopYx8fWkdxALEU",
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2024-09-23T13:34:07.695Z",
    "fingerprint": null,
    "browser_info": null,
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2024-09-23T13:19:09.657Z",
    "charges": null,
    "frm_metadata": null,
    "merchant_order_reference_id": null,
    "order_tax_amount": null
}
```

Note: Local testing not available for coinbase and cashtocode due to unavailability of credentials.

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