Bug: [FEATURE] scheme error code and messages in /payments API response



### Feature Description

If the payment is declined for a card transaction, the card scheme or issuer can send a raw response explaining why. These are the raw acquirer responses which helps in understanding why a card transaction was declined.

Some connectors like Adyen supports this - [reference](https://docs.adyen.com/development-resources/raw-acquirer-responses/#search-modal).

HyperSwitch today sends back `error_code` and `error_message` in the payments API response which are connector's error code and messages. Payments API response has to be extended to send back issuer specific error codes and messages.

### Possible Implementation

Issuer's error code and messages are received in payments API response or through webhooks. Considering this, below steps are to be followed

1. Ensure issuer's error code and messages are sent back from connector integration to core layer in `ErrorResponse`
2. Ensure this is handled in `IncomingWebhook` flows
3. Ensure this is stored in `payment_attempt` table
4. Ensure this is sent back in payments response

##### Changes required

1. Add below fields in `payment_attempt` table
- `issuer_error_code`
- `issuer_error_message`

2. Add below fields to payments API response
- `issuer_error_code`
- `issuer_error_message`

This maintains the existing naming convention. Today, HyperSwitch has -
- `error_code` and `unified_code`
- `error_message` and `unified_message`

### 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/api-reference-v2/openapi_spec.json b/api-reference-v2/openapi_spec.json
index d93208fb665..081ec577185 100644
--- a/api-reference-v2/openapi_spec.json
+++ b/api-reference-v2/openapi_spec.json
@@ -7633,6 +7633,7 @@
           "globepay",
           "gocardless",
           "gpayments",
+          "hipay",
           "helcim",
           "inespay",
           "iatapay",
@@ -8720,6 +8721,14 @@
               }
             ],
             "nullable": true
+          },
+          "network_tokenization": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/NetworkTokenResponse"
+              }
+            ],
+            "nullable": true
           }
         }
       },
@@ -11583,6 +11592,14 @@
             "type": "object",
             "description": "Metadata is useful for storing additional, unstructured information about the merchant account.",
             "nullable": true
+          },
+          "product_type": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/api_enums.MerchantProductType"
+              }
+            ],
+            "nullable": true
           }
         },
         "additionalProperties": false
@@ -11717,6 +11734,14 @@
           },
           "recon_status": {
             "$ref": "#/components/schemas/ReconStatus"
+          },
+          "product_type": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/api_enums.MerchantProductType"
+              }
+            ],
+            "nullable": true
           }
         }
       },
@@ -15350,6 +15375,14 @@
             },
             "description": "The connector token details if available",
             "nullable": true
+          },
+          "network_token": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/NetworkTokenResponse"
+              }
+            ],
+            "nullable": true
           }
         }
       },
@@ -15883,7 +15916,8 @@
           "active_attempt_payment_connector_id",
           "billing_connector_payment_details",
           "payment_method_type",
-          "payment_method_subtype"
+          "payment_method_subtype",
+          "connector"
         ],
         "properties": {
           "total_retry_count": {
@@ -15914,6 +15948,9 @@
           },
           "payment_method_subtype": {
             "$ref": "#/components/schemas/PaymentMethodType"
+          },
+          "connector": {
+            "$ref": "#/components/schemas/Connector"
           }
         }
       },
@@ -20300,6 +20337,7 @@
           "globalpay",
           "globepay",
           "gocardless",
+          "hipay",
           "helcim",
           "iatapay",
           "inespay",
diff --git a/crates/api_models/src/payments.rs b/crates/api_models/src/payments.rs
index 651b0096566..2e21de61083 100644
--- a/crates/api_models/src/payments.rs
+++ b/crates/api_models/src/payments.rs
@@ -5036,6 +5036,12 @@ pub struct PaymentsResponse {
     /// Method through which card was discovered
     #[schema(value_type = Option<CardDiscovery>, example = "manual")]
     pub card_discovery: Option<enums::CardDiscovery>,
+
+    /// Error code received from the issuer in case of failed payments
+    pub issuer_error_code: Option<String>,
+
+    /// Error message received from the issuer in case of failed payments
+    pub issuer_error_message: Option<String>,
 }
 
 #[cfg(feature = "v2")]
diff --git a/crates/api_models/src/refunds.rs b/crates/api_models/src/refunds.rs
index ad09c333ea7..ece1edb72bd 100644
--- a/crates/api_models/src/refunds.rs
+++ b/crates/api_models/src/refunds.rs
@@ -210,6 +210,10 @@ pub struct RefundResponse {
     /// Charge specific fields for controlling the revert of funds from either platform or connected account
     #[schema(value_type = Option<SplitRefund>,)]
     pub split_refunds: Option<common_types::refunds::SplitRefund>,
+    /// Error code received from the issuer in case of failed refunds
+    pub issuer_error_code: Option<String>,
+    /// Error message received from the issuer in case of failed refunds
+    pub issuer_error_message: Option<String>,
 }
 
 #[cfg(feature = "v1")]
diff --git a/crates/diesel_models/src/payment_attempt.rs b/crates/diesel_models/src/payment_attempt.rs
index 7409b722653..8fb4afeb8ed 100644
--- a/crates/diesel_models/src/payment_attempt.rs
+++ b/crates/diesel_models/src/payment_attempt.rs
@@ -187,6 +187,8 @@ pub struct PaymentAttempt {
     pub processor_transaction_data: Option<String>,
     pub card_discovery: Option<storage_enums::CardDiscovery>,
     pub charges: Option<common_types::payments::ConnectorChargeResponseData>,
+    pub issuer_error_code: Option<String>,
+    pub issuer_error_message: Option<String>,
 }
 
 #[cfg(feature = "v1")]
@@ -547,6 +549,8 @@ pub enum PaymentAttemptUpdate {
         connector_transaction_id: Option<String>,
         payment_method_data: Option<serde_json::Value>,
         authentication_type: Option<storage_enums::AuthenticationType>,
+        issuer_error_code: Option<String>,
+        issuer_error_message: Option<String>,
     },
     CaptureUpdate {
         amount_to_capture: Option<MinorUnit>,
@@ -898,6 +902,8 @@ pub struct PaymentAttemptUpdateInternal {
     pub processor_transaction_data: Option<String>,
     pub card_discovery: Option<common_enums::CardDiscovery>,
     pub charges: Option<common_types::payments::ConnectorChargeResponseData>,
+    pub issuer_error_code: Option<String>,
+    pub issuer_error_message: Option<String>,
 }
 
 #[cfg(feature = "v1")]
@@ -1082,6 +1088,8 @@ impl PaymentAttemptUpdate {
             connector_mandate_detail,
             card_discovery,
             charges,
+            issuer_error_code,
+            issuer_error_message,
         } = PaymentAttemptUpdateInternal::from(self).populate_derived_fields(&source);
         PaymentAttempt {
             amount: amount.unwrap_or(source.amount),
@@ -1141,6 +1149,8 @@ impl PaymentAttemptUpdate {
             connector_mandate_detail: connector_mandate_detail.or(source.connector_mandate_detail),
             card_discovery: card_discovery.or(source.card_discovery),
             charges: charges.or(source.charges),
+            issuer_error_code: issuer_error_code.or(source.issuer_error_code),
+            issuer_error_message: issuer_error_message.or(source.issuer_error_message),
             ..source
         }
     }
@@ -2194,6 +2204,8 @@ impl From<PaymentAttemptUpdate> for PaymentAttemptUpdateInternal {
                 connector_mandate_detail: None,
                 card_discovery: None,
                 charges: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             },
             PaymentAttemptUpdate::AuthenticationTypeUpdate {
                 authentication_type,
@@ -2251,6 +2263,8 @@ impl From<PaymentAttemptUpdate> for PaymentAttemptUpdateInternal {
                 connector_mandate_detail: None,
                 card_discovery: None,
                 charges: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             },
             PaymentAttemptUpdate::ConfirmUpdate {
                 amount,
@@ -2340,6 +2354,8 @@ impl From<PaymentAttemptUpdate> for PaymentAttemptUpdateInternal {
                 connector_mandate_detail,
                 card_discovery,
                 charges: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             },
             PaymentAttemptUpdate::VoidUpdate {
                 status,
@@ -2398,6 +2414,8 @@ impl From<PaymentAttemptUpdate> for PaymentAttemptUpdateInternal {
                 connector_mandate_detail: None,
                 card_discovery: None,
                 charges: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             },
             PaymentAttemptUpdate::RejectUpdate {
                 status,
@@ -2457,6 +2475,8 @@ impl From<PaymentAttemptUpdate> for PaymentAttemptUpdateInternal {
                 connector_mandate_detail: None,
                 card_discovery: None,
                 charges: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             },
             PaymentAttemptUpdate::BlocklistUpdate {
                 status,
@@ -2516,6 +2536,8 @@ impl From<PaymentAttemptUpdate> for PaymentAttemptUpdateInternal {
                 connector_mandate_detail: None,
                 card_discovery: None,
                 charges: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             },
             PaymentAttemptUpdate::ConnectorMandateDetailUpdate {
                 connector_mandate_detail,
@@ -2573,6 +2595,8 @@ impl From<PaymentAttemptUpdate> for PaymentAttemptUpdateInternal {
                 connector_mandate_detail,
                 card_discovery: None,
                 charges: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             },
             PaymentAttemptUpdate::PaymentMethodDetailsUpdate {
                 payment_method_id,
@@ -2630,6 +2654,8 @@ impl From<PaymentAttemptUpdate> for PaymentAttemptUpdateInternal {
                 connector_mandate_detail: None,
                 card_discovery: None,
                 charges: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             },
             PaymentAttemptUpdate::ResponseUpdate {
                 status,
@@ -2712,6 +2738,8 @@ impl From<PaymentAttemptUpdate> for PaymentAttemptUpdateInternal {
                     shipping_cost: None,
                     order_tax_amount: None,
                     card_discovery: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }
             }
             PaymentAttemptUpdate::ErrorUpdate {
@@ -2727,6 +2755,8 @@ impl From<PaymentAttemptUpdate> for PaymentAttemptUpdateInternal {
                 connector_transaction_id,
                 payment_method_data,
                 authentication_type,
+                issuer_error_code,
+                issuer_error_message,
             } => {
                 let (connector_transaction_id, processor_transaction_data) =
                     connector_transaction_id
@@ -2748,6 +2778,8 @@ impl From<PaymentAttemptUpdate> for PaymentAttemptUpdateInternal {
                     payment_method_data,
                     authentication_type,
                     processor_transaction_data,
+                    issuer_error_code,
+                    issuer_error_message,
                     amount: None,
                     net_amount: None,
                     currency: None,
@@ -2841,6 +2873,8 @@ impl From<PaymentAttemptUpdate> for PaymentAttemptUpdateInternal {
                 connector_mandate_detail: None,
                 card_discovery: None,
                 charges: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             },
             PaymentAttemptUpdate::UpdateTrackers {
                 payment_token,
@@ -2904,6 +2938,8 @@ impl From<PaymentAttemptUpdate> for PaymentAttemptUpdateInternal {
                 connector_mandate_detail: None,
                 card_discovery: None,
                 charges: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             },
             PaymentAttemptUpdate::UnresolvedResponseUpdate {
                 status,
@@ -2974,6 +3010,8 @@ impl From<PaymentAttemptUpdate> for PaymentAttemptUpdateInternal {
                     connector_mandate_detail: None,
                     card_discovery: None,
                     charges: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }
             }
             PaymentAttemptUpdate::PreprocessingUpdate {
@@ -3043,6 +3081,8 @@ impl From<PaymentAttemptUpdate> for PaymentAttemptUpdateInternal {
                     connector_mandate_detail: None,
                     card_discovery: None,
                     charges: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }
             }
             PaymentAttemptUpdate::CaptureUpdate {
@@ -3102,6 +3142,8 @@ impl From<PaymentAttemptUpdate> for PaymentAttemptUpdateInternal {
                 connector_mandate_detail: None,
                 card_discovery: None,
                 charges: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             },
             PaymentAttemptUpdate::AmountToCaptureUpdate {
                 status,
@@ -3160,6 +3202,8 @@ impl From<PaymentAttemptUpdate> for PaymentAttemptUpdateInternal {
                 connector_mandate_detail: None,
                 card_discovery: None,
                 charges: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             },
             PaymentAttemptUpdate::ConnectorResponse {
                 authentication_data,
@@ -3227,6 +3271,8 @@ impl From<PaymentAttemptUpdate> for PaymentAttemptUpdateInternal {
                     order_tax_amount: None,
                     connector_mandate_detail: None,
                     card_discovery: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }
             }
             PaymentAttemptUpdate::IncrementalAuthorizationAmountUpdate {
@@ -3285,6 +3331,8 @@ impl From<PaymentAttemptUpdate> for PaymentAttemptUpdateInternal {
                 connector_mandate_detail: None,
                 card_discovery: None,
                 charges: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             },
             PaymentAttemptUpdate::AuthenticationUpdate {
                 status,
@@ -3345,6 +3393,8 @@ impl From<PaymentAttemptUpdate> for PaymentAttemptUpdateInternal {
                 connector_mandate_detail: None,
                 card_discovery: None,
                 charges: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             },
             PaymentAttemptUpdate::ManualUpdate {
                 status,
@@ -3414,6 +3464,8 @@ impl From<PaymentAttemptUpdate> for PaymentAttemptUpdateInternal {
                     connector_mandate_detail: None,
                     card_discovery: None,
                     charges: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }
             }
             PaymentAttemptUpdate::PostSessionTokensUpdate {
@@ -3472,6 +3524,8 @@ impl From<PaymentAttemptUpdate> for PaymentAttemptUpdateInternal {
                 connector_mandate_detail: None,
                 card_discovery: None,
                 charges: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             },
         }
     }
diff --git a/crates/diesel_models/src/refund.rs b/crates/diesel_models/src/refund.rs
index f19c3252c60..ee598bebd2f 100644
--- a/crates/diesel_models/src/refund.rs
+++ b/crates/diesel_models/src/refund.rs
@@ -60,6 +60,8 @@ pub struct Refund {
     pub unified_message: Option<String>,
     pub processor_refund_data: Option<String>,
     pub processor_transaction_data: Option<String>,
+    pub issuer_error_code: Option<String>,
+    pub issuer_error_message: Option<String>,
 }
 
 #[derive(
@@ -140,6 +142,8 @@ pub enum RefundUpdate {
         processor_refund_data: Option<String>,
         unified_code: Option<String>,
         unified_message: Option<String>,
+        issuer_error_code: Option<String>,
+        issuer_error_message: Option<String>,
     },
     ManualUpdate {
         refund_status: Option<storage_enums::RefundStatus>,
@@ -165,6 +169,8 @@ pub struct RefundUpdateInternal {
     processor_refund_data: Option<String>,
     unified_code: Option<String>,
     unified_message: Option<String>,
+    issuer_error_code: Option<String>,
+    issuer_error_message: Option<String>,
 }
 
 impl RefundUpdateInternal {
@@ -213,6 +219,8 @@ impl From<RefundUpdate> for RefundUpdateInternal {
                 modified_at: common_utils::date_time::now(),
                 unified_code: None,
                 unified_message: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             },
             RefundUpdate::MetadataAndReasonUpdate {
                 metadata,
@@ -232,6 +240,8 @@ impl From<RefundUpdate> for RefundUpdateInternal {
                 processor_refund_data: None,
                 unified_code: None,
                 unified_message: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             },
             RefundUpdate::StatusUpdate {
                 connector_refund_id,
@@ -253,6 +263,8 @@ impl From<RefundUpdate> for RefundUpdateInternal {
                 modified_at: common_utils::date_time::now(),
                 unified_code: None,
                 unified_message: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             },
             RefundUpdate::ErrorUpdate {
                 refund_status,
@@ -263,6 +275,8 @@ impl From<RefundUpdate> for RefundUpdateInternal {
                 updated_by,
                 connector_refund_id,
                 processor_refund_data,
+                issuer_error_code,
+                issuer_error_message,
             } => Self {
                 refund_status,
                 refund_error_message,
@@ -277,6 +291,8 @@ impl From<RefundUpdate> for RefundUpdateInternal {
                 modified_at: common_utils::date_time::now(),
                 unified_code,
                 unified_message,
+                issuer_error_code,
+                issuer_error_message,
             },
             RefundUpdate::ManualUpdate {
                 refund_status,
@@ -297,6 +313,8 @@ impl From<RefundUpdate> for RefundUpdateInternal {
                 processor_refund_data: None,
                 unified_code: None,
                 unified_message: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             },
         }
     }
@@ -318,6 +336,8 @@ impl RefundUpdate {
             processor_refund_data,
             unified_code,
             unified_message,
+            issuer_error_code,
+            issuer_error_message,
         } = self.into();
         Refund {
             connector_refund_id: connector_refund_id.or(source.connector_refund_id),
@@ -333,6 +353,8 @@ impl RefundUpdate {
             processor_refund_data: processor_refund_data.or(source.processor_refund_data),
             unified_code: unified_code.or(source.unified_code),
             unified_message: unified_message.or(source.unified_message),
+            issuer_error_code: issuer_error_code.or(source.issuer_error_code),
+            issuer_error_message: issuer_error_message.or(source.issuer_error_message),
             ..source
         }
     }
diff --git a/crates/diesel_models/src/schema.rs b/crates/diesel_models/src/schema.rs
index ae01a54bd43..4e2ba4811b1 100644
--- a/crates/diesel_models/src/schema.rs
+++ b/crates/diesel_models/src/schema.rs
@@ -922,6 +922,9 @@ diesel::table! {
         processor_transaction_data -> Nullable<Text>,
         card_discovery -> Nullable<CardDiscovery>,
         charges -> Nullable<Jsonb>,
+        #[max_length = 64]
+        issuer_error_code -> Nullable<Varchar>,
+        issuer_error_message -> Nullable<Text>,
     }
 }
 
@@ -1276,6 +1279,9 @@ diesel::table! {
         unified_message -> Nullable<Varchar>,
         processor_refund_data -> Nullable<Text>,
         processor_transaction_data -> Nullable<Text>,
+        #[max_length = 64]
+        issuer_error_code -> Nullable<Varchar>,
+        issuer_error_message -> Nullable<Text>,
     }
 }
 
diff --git a/crates/hyperswitch_connectors/src/connectors/aci.rs b/crates/hyperswitch_connectors/src/connectors/aci.rs
index f4fce668ee0..8219105ed2f 100644
--- a/crates/hyperswitch_connectors/src/connectors/aci.rs
+++ b/crates/hyperswitch_connectors/src/connectors/aci.rs
@@ -121,6 +121,8 @@ impl ConnectorCommon for Aci {
             }),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/adyen.rs b/crates/hyperswitch_connectors/src/connectors/adyen.rs
index 1e57cbbcf65..8e0694336b5 100644
--- a/crates/hyperswitch_connectors/src/connectors/adyen.rs
+++ b/crates/hyperswitch_connectors/src/connectors/adyen.rs
@@ -144,6 +144,8 @@ impl ConnectorCommon for Adyen {
             reason: Some(response.message),
             attempt_status: None,
             connector_transaction_id: response.psp_reference,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -988,6 +990,8 @@ impl ConnectorIntegration<PreProcessing, PaymentsPreProcessingData, PaymentsResp
                     status_code: res.status_code,
                     attempt_status: Some(enums::AttemptStatus::Failure),
                     connector_transaction_id: Some(response.psp_reference),
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..data.clone()
             })
diff --git a/crates/hyperswitch_connectors/src/connectors/adyen/transformers.rs b/crates/hyperswitch_connectors/src/connectors/adyen/transformers.rs
index 13a29f16a0d..793a33e1fc1 100644
--- a/crates/hyperswitch_connectors/src/connectors/adyen/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/adyen/transformers.rs
@@ -144,6 +144,8 @@ pub struct AdditionalData {
     #[cfg(feature = "payouts")]
     payout_eligible: Option<PayoutEligibility>,
     funds_availability: Option<String>,
+    refusal_reason_raw: Option<String>,
+    refusal_code_raw: Option<String>,
 }
 
 #[serde_with::skip_serializing_none]
@@ -444,6 +446,10 @@ pub struct AdyenWebhookResponse {
     refusal_reason: Option<String>,
     refusal_reason_code: Option<String>,
     event_code: WebhookEventCode,
+    // Raw acquirer refusal code
+    refusal_code_raw: Option<String>,
+    // Raw acquirer refusal reason
+    refusal_reason_raw: Option<String>,
 }
 
 #[derive(Debug, Clone, Serialize, Deserialize)]
@@ -453,6 +459,7 @@ pub struct RedirectionErrorResponse {
     refusal_reason: Option<String>,
     psp_reference: Option<String>,
     merchant_reference: Option<String>,
+    additional_data: Option<AdditionalData>,
 }
 
 #[derive(Debug, Clone, Deserialize, Serialize)]
@@ -466,6 +473,7 @@ pub struct RedirectionResponse {
     merchant_reference: Option<String>,
     store: Option<String>,
     splits: Option<Vec<AdyenSplitData>>,
+    additional_data: Option<AdditionalData>,
 }
 
 #[derive(Debug, Clone, Deserialize, Serialize)]
@@ -3461,6 +3469,14 @@ pub fn get_adyen_response(
             status_code,
             attempt_status: None,
             connector_transaction_id: Some(response.psp_reference.clone()),
+            issuer_error_code: response
+                .additional_data
+                .as_ref()
+                .and_then(|data| data.refusal_code_raw.clone()),
+            issuer_error_message: response
+                .additional_data
+                .as_ref()
+                .and_then(|data| data.refusal_reason_raw.clone()),
         })
     } else {
         None
@@ -3533,6 +3549,8 @@ pub fn get_webhook_response(
             status_code,
             attempt_status: None,
             connector_transaction_id: Some(response.transaction_id.clone()),
+            issuer_error_code: response.refusal_code_raw.clone(),
+            issuer_error_message: response.refusal_reason_raw.clone(),
         })
     } else {
         None
@@ -3598,6 +3616,14 @@ pub fn get_redirection_response(
             status_code,
             attempt_status: None,
             connector_transaction_id: response.psp_reference.clone(),
+            issuer_error_code: response
+                .additional_data
+                .as_ref()
+                .and_then(|data| data.refusal_code_raw.clone()),
+            issuer_error_message: response
+                .additional_data
+                .as_ref()
+                .and_then(|data| data.refusal_reason_raw.clone()),
         })
     } else {
         None
@@ -3674,6 +3700,8 @@ pub fn get_present_to_shopper_response(
             status_code,
             attempt_status: None,
             connector_transaction_id: response.psp_reference.clone(),
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     } else {
         None
@@ -3739,6 +3767,8 @@ pub fn get_qr_code_response(
             status_code,
             attempt_status: None,
             connector_transaction_id: response.psp_reference.clone(),
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     } else {
         None
@@ -3796,6 +3826,14 @@ pub fn get_redirection_error_response(
         status_code,
         attempt_status: None,
         connector_transaction_id: response.psp_reference.clone(),
+        issuer_error_code: response
+            .additional_data
+            .as_ref()
+            .and_then(|data| data.refusal_code_raw.clone()),
+        issuer_error_message: response
+            .additional_data
+            .as_ref()
+            .and_then(|data| data.refusal_reason_raw.clone()),
     });
     // We don't get connector transaction id for redirections in Adyen.
     let payments_response_data = PaymentsResponseData::TransactionResponse {
@@ -4307,6 +4345,10 @@ pub struct AdyenAdditionalDataWH {
     #[serde(rename = "recurring.recurringDetailReference")]
     pub recurring_detail_reference: Option<Secret<String>>,
     pub network_tx_reference: Option<Secret<String>>,
+    /// [only for cards] Enable raw acquirer from Adyen dashboard to receive this (https://docs.adyen.com/development-resources/raw-acquirer-responses/#search-modal)
+    pub refusal_reason_raw: Option<String>,
+    /// [only for cards] This is only available for Visa and Mastercard
+    pub refusal_code_raw: Option<String>,
 }
 
 #[derive(Debug, Deserialize)]
@@ -4592,6 +4634,8 @@ impl From<AdyenNotificationRequestItemWH> for AdyenWebhookResponse {
             refusal_reason,
             refusal_reason_code,
             event_code: notif.event_code,
+            refusal_code_raw: notif.additional_data.refusal_code_raw,
+            refusal_reason_raw: notif.additional_data.refusal_reason_raw,
         }
     }
 }
@@ -5307,6 +5351,8 @@ impl ForeignTryFrom<(&Self, AdyenDisputeResponse)> for AcceptDisputeRouterData {
                     )?,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..data.clone()
             })
@@ -5345,6 +5391,8 @@ impl ForeignTryFrom<(&Self, AdyenDisputeResponse)> for SubmitEvidenceRouterData
                     )?,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..data.clone()
             })
@@ -5385,6 +5433,8 @@ impl ForeignTryFrom<(&Self, AdyenDisputeResponse)> for DefendDisputeRouterData {
                     )?,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..data.clone()
             })
diff --git a/crates/hyperswitch_connectors/src/connectors/airwallex.rs b/crates/hyperswitch_connectors/src/connectors/airwallex.rs
index f37bef83026..c7482236264 100644
--- a/crates/hyperswitch_connectors/src/connectors/airwallex.rs
+++ b/crates/hyperswitch_connectors/src/connectors/airwallex.rs
@@ -122,6 +122,8 @@ impl ConnectorCommon for Airwallex {
             reason: response.source,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/amazonpay.rs b/crates/hyperswitch_connectors/src/connectors/amazonpay.rs
index f8959541574..d383bb59b74 100644
--- a/crates/hyperswitch_connectors/src/connectors/amazonpay.rs
+++ b/crates/hyperswitch_connectors/src/connectors/amazonpay.rs
@@ -145,6 +145,8 @@ impl ConnectorCommon for Amazonpay {
             reason: response.reason,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/authorizedotnet.rs b/crates/hyperswitch_connectors/src/connectors/authorizedotnet.rs
index 3bd39fd38b5..de72dbe2aeb 100644
--- a/crates/hyperswitch_connectors/src/connectors/authorizedotnet.rs
+++ b/crates/hyperswitch_connectors/src/connectors/authorizedotnet.rs
@@ -1000,6 +1000,8 @@ fn get_error_response(
                     status_code,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 })
             })
             .unwrap_or_else(|| ErrorResponse {
@@ -1009,6 +1011,8 @@ fn get_error_response(
                 status_code,
                 attempt_status: None,
                 connector_transaction_id: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             })),
         Some(authorizedotnet::TransactionResponse::AuthorizedotnetTransactionResponseError(_))
         | None => {
@@ -1025,6 +1029,8 @@ fn get_error_response(
                 status_code,
                 attempt_status: None,
                 connector_transaction_id: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             })
         }
     }
diff --git a/crates/hyperswitch_connectors/src/connectors/authorizedotnet/transformers.rs b/crates/hyperswitch_connectors/src/connectors/authorizedotnet/transformers.rs
index d7f50aa7405..6481d41748c 100644
--- a/crates/hyperswitch_connectors/src/connectors/authorizedotnet/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/authorizedotnet/transformers.rs
@@ -551,6 +551,8 @@ impl<F, T>
                     status_code: item.http_code,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 });
                 Ok(Self {
                     response,
@@ -1219,6 +1221,8 @@ impl<F, T>
                         status_code: item.http_code,
                         attempt_status: None,
                         connector_transaction_id: Some(transaction_response.transaction_id.clone()),
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     })
                 });
                 let metadata = transaction_response
@@ -1310,6 +1314,8 @@ impl<F, T> TryFrom<ResponseRouterData<F, AuthorizedotnetVoidResponse, T, Payment
                         status_code: item.http_code,
                         attempt_status: None,
                         connector_transaction_id: Some(transaction_response.transaction_id.clone()),
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     })
                 });
                 let metadata = transaction_response
@@ -1458,6 +1464,8 @@ impl<F> TryFrom<RefundsResponseRouterData<F, AuthorizedotnetRefundResponse>>
                 status_code: item.http_code,
                 attempt_status: None,
                 connector_transaction_id: Some(transaction_response.transaction_id.clone()),
+                issuer_error_code: None,
+                issuer_error_message: None,
             })
         });
 
@@ -1735,6 +1743,8 @@ fn get_err_response(
         status_code,
         attempt_status: None,
         connector_transaction_id: None,
+        issuer_error_code: None,
+        issuer_error_message: None,
     })
 }
 
diff --git a/crates/hyperswitch_connectors/src/connectors/bambora.rs b/crates/hyperswitch_connectors/src/connectors/bambora.rs
index c4a9edea65c..1bf524392d7 100644
--- a/crates/hyperswitch_connectors/src/connectors/bambora.rs
+++ b/crates/hyperswitch_connectors/src/connectors/bambora.rs
@@ -144,6 +144,8 @@ impl ConnectorCommon for Bambora {
             reason: Some(response.message),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/bamboraapac.rs b/crates/hyperswitch_connectors/src/connectors/bamboraapac.rs
index f7453495077..fb9c0799124 100644
--- a/crates/hyperswitch_connectors/src/connectors/bamboraapac.rs
+++ b/crates/hyperswitch_connectors/src/connectors/bamboraapac.rs
@@ -163,6 +163,8 @@ impl ConnectorCommon for Bamboraapac {
                     reason: response_data.declined_message,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 })
             }
             Err(error_msg) => {
diff --git a/crates/hyperswitch_connectors/src/connectors/bamboraapac/transformers.rs b/crates/hyperswitch_connectors/src/connectors/bamboraapac/transformers.rs
index 5996ba05834..525b0456cec 100644
--- a/crates/hyperswitch_connectors/src/connectors/bamboraapac/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/bamboraapac/transformers.rs
@@ -346,6 +346,8 @@ impl<F>
                     reason: Some(declined_message),
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..item.data
             })
@@ -501,6 +503,8 @@ impl<F>
                     reason: None,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..item.data
             })
@@ -663,6 +667,8 @@ impl<F>
                     reason: Some(declined_message),
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..item.data
             })
@@ -944,6 +950,8 @@ impl<F>
                     reason: Some(declined_message),
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..item.data
             })
diff --git a/crates/hyperswitch_connectors/src/connectors/bankofamerica.rs b/crates/hyperswitch_connectors/src/connectors/bankofamerica.rs
index 36d12fe3fc5..c1cc1b644a7 100644
--- a/crates/hyperswitch_connectors/src/connectors/bankofamerica.rs
+++ b/crates/hyperswitch_connectors/src/connectors/bankofamerica.rs
@@ -276,6 +276,8 @@ impl ConnectorCommon for Bankofamerica {
                     reason,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 })
             }
             transformers::BankOfAmericaErrorResponse::AuthenticationError(response) => {
@@ -286,6 +288,8 @@ impl ConnectorCommon for Bankofamerica {
                     reason: Some(response.response.rmsg),
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 })
             }
         }
@@ -434,6 +438,8 @@ impl ConnectorIntegration<SetupMandate, SetupMandateRequestData, PaymentsRespons
                 .unwrap_or(hyperswitch_interfaces::consts::NO_ERROR_MESSAGE.to_string()),
             attempt_status,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -556,6 +562,8 @@ impl ConnectorIntegration<Authorize, PaymentsAuthorizeData, PaymentsResponseData
                 .unwrap_or(hyperswitch_interfaces::consts::NO_ERROR_MESSAGE.to_string()),
             attempt_status,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -746,6 +754,8 @@ impl ConnectorIntegration<Capture, PaymentsCaptureData, PaymentsResponseData> fo
                 .unwrap_or(hyperswitch_interfaces::consts::NO_ERROR_MESSAGE.to_string()),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -867,6 +877,8 @@ impl ConnectorIntegration<Void, PaymentsCancelData, PaymentsResponseData> for Ba
                 .unwrap_or(hyperswitch_interfaces::consts::NO_ERROR_MESSAGE.to_string()),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/bankofamerica/transformers.rs b/crates/hyperswitch_connectors/src/connectors/bankofamerica/transformers.rs
index 9804f6c4e6c..4b40e36a7a6 100644
--- a/crates/hyperswitch_connectors/src/connectors/bankofamerica/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/bankofamerica/transformers.rs
@@ -1445,6 +1445,8 @@ fn map_error_response<F, T>(
         status_code: item.http_code,
         attempt_status: None,
         connector_transaction_id: Some(error_response.id.clone()),
+        issuer_error_code: None,
+        issuer_error_message: None,
     });
 
     match transaction_status {
@@ -1486,10 +1488,10 @@ fn get_payment_response(
         enums::AttemptStatus,
         u16,
     ),
-) -> Result<PaymentsResponseData, ErrorResponse> {
+) -> Result<PaymentsResponseData, Box<ErrorResponse>> {
     let error_response = get_error_response_if_failure((info_response, status, http_code));
     match error_response {
-        Some(error) => Err(error),
+        Some(error) => Err(Box::new(error)),
         None => {
             let mandate_reference =
                 info_response
@@ -1549,7 +1551,8 @@ impl<F>
                     info_response.status.clone(),
                     item.data.request.is_auto_capture()?,
                 ));
-                let response = get_payment_response((&info_response, status, item.http_code));
+                let response = get_payment_response((&info_response, status, item.http_code))
+                    .map_err(|err| *err);
                 let connector_response = match item.data.payment_method {
                     common_enums::PaymentMethod::Card => info_response
                         .processor_information
@@ -1648,7 +1651,8 @@ impl<F>
         match item.response {
             BankOfAmericaPaymentsResponse::ClientReferenceInformation(info_response) => {
                 let status = map_boa_attempt_status((info_response.status.clone(), true));
-                let response = get_payment_response((&info_response, status, item.http_code));
+                let response = get_payment_response((&info_response, status, item.http_code))
+                    .map_err(|err| *err);
                 Ok(Self {
                     status,
                     response,
@@ -1684,7 +1688,8 @@ impl<F>
         match item.response {
             BankOfAmericaPaymentsResponse::ClientReferenceInformation(info_response) => {
                 let status = map_boa_attempt_status((info_response.status.clone(), false));
-                let response = get_payment_response((&info_response, status, item.http_code));
+                let response = get_payment_response((&info_response, status, item.http_code))
+                    .map_err(|err| *err);
                 Ok(Self {
                     status,
                     response,
@@ -2244,6 +2249,8 @@ fn get_error_response(
         status_code,
         attempt_status,
         connector_transaction_id: Some(transaction_id.clone()),
+        issuer_error_code: None,
+        issuer_error_message: None,
     }
 }
 
@@ -2521,6 +2528,8 @@ fn convert_to_error_response_from_error_info(
         status_code,
         attempt_status: None,
         connector_transaction_id: Some(error_response.id.clone()),
+        issuer_error_code: None,
+        issuer_error_message: None,
     }
 }
 
diff --git a/crates/hyperswitch_connectors/src/connectors/billwerk.rs b/crates/hyperswitch_connectors/src/connectors/billwerk.rs
index b5ddef00358..34bf83a7bd5 100644
--- a/crates/hyperswitch_connectors/src/connectors/billwerk.rs
+++ b/crates/hyperswitch_connectors/src/connectors/billwerk.rs
@@ -154,6 +154,8 @@ impl ConnectorCommon for Billwerk {
             reason: Some(response.error),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/billwerk/transformers.rs b/crates/hyperswitch_connectors/src/connectors/billwerk/transformers.rs
index 9fe00bac046..e6499306d0f 100644
--- a/crates/hyperswitch_connectors/src/connectors/billwerk/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/billwerk/transformers.rs
@@ -279,6 +279,8 @@ impl<F, T> TryFrom<ResponseRouterData<F, BillwerkPaymentsResponse, T, PaymentsRe
                 status_code: item.http_code,
                 attempt_status: None,
                 connector_transaction_id: Some(item.response.handle.clone()),
+                issuer_error_code: None,
+                issuer_error_message: None,
             })
         } else {
             None
diff --git a/crates/hyperswitch_connectors/src/connectors/bitpay.rs b/crates/hyperswitch_connectors/src/connectors/bitpay.rs
index 4de2f422b94..992196c61d3 100644
--- a/crates/hyperswitch_connectors/src/connectors/bitpay.rs
+++ b/crates/hyperswitch_connectors/src/connectors/bitpay.rs
@@ -153,6 +153,8 @@ impl ConnectorCommon for Bitpay {
             reason: response.message,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/bluesnap.rs b/crates/hyperswitch_connectors/src/connectors/bluesnap.rs
index 29b0611c979..23720360294 100644
--- a/crates/hyperswitch_connectors/src/connectors/bluesnap.rs
+++ b/crates/hyperswitch_connectors/src/connectors/bluesnap.rs
@@ -168,6 +168,8 @@ impl ConnectorCommon for Bluesnap {
                             reason: Some(reason),
                             attempt_status: None,
                             connector_transaction_id: None,
+                            issuer_error_code: None,
+                            issuer_error_message: None,
                         }
                     }
                     bluesnap::BluesnapErrors::Auth(error_res) => ErrorResponse {
@@ -177,6 +179,8 @@ impl ConnectorCommon for Bluesnap {
                         reason: Some(error_res.error_description),
                         attempt_status: None,
                         connector_transaction_id: None,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     },
                     bluesnap::BluesnapErrors::General(error_response) => {
                         let (error_res, attempt_status) = if res.status_code == 403
@@ -199,6 +203,8 @@ impl ConnectorCommon for Bluesnap {
                             reason: Some(error_res),
                             attempt_status,
                             connector_transaction_id: None,
+                            issuer_error_code: None,
+                            issuer_error_message: None,
                         }
                     }
                 };
diff --git a/crates/hyperswitch_connectors/src/connectors/boku.rs b/crates/hyperswitch_connectors/src/connectors/boku.rs
index 68195979874..330e7b5ab45 100644
--- a/crates/hyperswitch_connectors/src/connectors/boku.rs
+++ b/crates/hyperswitch_connectors/src/connectors/boku.rs
@@ -163,6 +163,8 @@ impl ConnectorCommon for Boku {
                     reason: response.reason,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 })
             }
             Err(_) => get_xml_deserialized(res, event_builder),
@@ -705,6 +707,8 @@ fn get_xml_deserialized(
                 reason: Some(response_data),
                 attempt_status: None,
                 connector_transaction_id: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             })
         }
     }
diff --git a/crates/hyperswitch_connectors/src/connectors/braintree.rs b/crates/hyperswitch_connectors/src/connectors/braintree.rs
index e965e964293..67c54759152 100644
--- a/crates/hyperswitch_connectors/src/connectors/braintree.rs
+++ b/crates/hyperswitch_connectors/src/connectors/braintree.rs
@@ -169,6 +169,8 @@ impl ConnectorCommon for Braintree {
                     reason: Some(response.api_error_response.message),
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 })
             }
             Ok(braintree::ErrorResponses::BraintreeErrorResponse(response)) => {
@@ -182,6 +184,8 @@ impl ConnectorCommon for Braintree {
                     reason: Some(response.errors),
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 })
             }
             Err(error_msg) => {
diff --git a/crates/hyperswitch_connectors/src/connectors/braintree/transformers.rs b/crates/hyperswitch_connectors/src/connectors/braintree/transformers.rs
index 2a5fabb7788..dfde2e0a26d 100644
--- a/crates/hyperswitch_connectors/src/connectors/braintree/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/braintree/transformers.rs
@@ -447,7 +447,8 @@ impl<F>
     ) -> Result<Self, Self::Error> {
         match item.response {
             BraintreeAuthResponse::ErrorResponse(error_response) => Ok(Self {
-                response: build_error_response(&error_response.errors, item.http_code),
+                response: build_error_response(&error_response.errors, item.http_code)
+                    .map_err(|err| *err),
                 ..item.data
             }),
             BraintreeAuthResponse::AuthResponse(auth_response) => {
@@ -461,6 +462,8 @@ impl<F>
                         attempt_status: None,
                         connector_transaction_id: Some(transaction_data.id),
                         status_code: item.http_code,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     })
                 } else {
                     Ok(PaymentsResponseData::TransactionResponse {
@@ -513,7 +516,7 @@ impl<F>
 fn build_error_response<T>(
     response: &[ErrorDetails],
     http_code: u16,
-) -> Result<T, hyperswitch_domain_models::router_data::ErrorResponse> {
+) -> Result<T, Box<hyperswitch_domain_models::router_data::ErrorResponse>> {
     let error_messages = response
         .iter()
         .map(|error| error.message.to_string())
@@ -542,15 +545,19 @@ fn get_error_response<T>(
     error_msg: Option<String>,
     error_reason: Option<String>,
     http_code: u16,
-) -> Result<T, hyperswitch_domain_models::router_data::ErrorResponse> {
-    Err(hyperswitch_domain_models::router_data::ErrorResponse {
-        code: error_code.unwrap_or_else(|| NO_ERROR_CODE.to_string()),
-        message: error_msg.unwrap_or_else(|| NO_ERROR_MESSAGE.to_string()),
-        reason: error_reason,
-        status_code: http_code,
-        attempt_status: None,
-        connector_transaction_id: None,
-    })
+) -> Result<T, Box<hyperswitch_domain_models::router_data::ErrorResponse>> {
+    Err(Box::new(
+        hyperswitch_domain_models::router_data::ErrorResponse {
+            code: error_code.unwrap_or_else(|| NO_ERROR_CODE.to_string()),
+            message: error_msg.unwrap_or_else(|| NO_ERROR_MESSAGE.to_string()),
+            reason: error_reason,
+            status_code: http_code,
+            attempt_status: None,
+            connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
+        },
+    ))
 }
 
 #[derive(Debug, Clone, Deserialize, Serialize, strum::Display)]
@@ -624,7 +631,8 @@ impl<F>
     ) -> Result<Self, Self::Error> {
         match item.response {
             BraintreePaymentsResponse::ErrorResponse(error_response) => Ok(Self {
-                response: build_error_response(&error_response.errors.clone(), item.http_code),
+                response: build_error_response(&error_response.errors.clone(), item.http_code)
+                    .map_err(|err| *err),
                 ..item.data
             }),
             BraintreePaymentsResponse::PaymentsResponse(payment_response) => {
@@ -638,6 +646,8 @@ impl<F>
                         attempt_status: None,
                         connector_transaction_id: Some(transaction_data.id),
                         status_code: item.http_code,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     })
                 } else {
                     Ok(PaymentsResponseData::TransactionResponse {
@@ -708,7 +718,8 @@ impl<F>
     ) -> Result<Self, Self::Error> {
         match item.response {
             BraintreeCompleteChargeResponse::ErrorResponse(error_response) => Ok(Self {
-                response: build_error_response(&error_response.errors.clone(), item.http_code),
+                response: build_error_response(&error_response.errors.clone(), item.http_code)
+                    .map_err(|err| *err),
                 ..item.data
             }),
             BraintreeCompleteChargeResponse::PaymentsResponse(payment_response) => {
@@ -722,6 +733,8 @@ impl<F>
                         attempt_status: None,
                         connector_transaction_id: Some(transaction_data.id),
                         status_code: item.http_code,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     })
                 } else {
                     Ok(PaymentsResponseData::TransactionResponse {
@@ -773,7 +786,8 @@ impl<F>
     ) -> Result<Self, Self::Error> {
         match item.response {
             BraintreeCompleteAuthResponse::ErrorResponse(error_response) => Ok(Self {
-                response: build_error_response(&error_response.errors, item.http_code),
+                response: build_error_response(&error_response.errors, item.http_code)
+                    .map_err(|err| *err),
                 ..item.data
             }),
             BraintreeCompleteAuthResponse::AuthResponse(auth_response) => {
@@ -787,6 +801,8 @@ impl<F>
                         attempt_status: None,
                         connector_transaction_id: Some(transaction_data.id),
                         status_code: item.http_code,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     })
                 } else {
                     Ok(PaymentsResponseData::TransactionResponse {
@@ -962,7 +978,7 @@ impl TryFrom<RefundsResponseRouterData<Execute, BraintreeRefundResponse>>
         Ok(Self {
             response: match item.response {
                 BraintreeRefundResponse::ErrorResponse(error_response) => {
-                    build_error_response(&error_response.errors, item.http_code)
+                    build_error_response(&error_response.errors, item.http_code).map_err(|err| *err)
                 }
                 BraintreeRefundResponse::SuccessResponse(refund_data) => {
                     let refund_data = refund_data.data.refund_transaction.refund;
@@ -975,6 +991,8 @@ impl TryFrom<RefundsResponseRouterData<Execute, BraintreeRefundResponse>>
                             attempt_status: None,
                             connector_transaction_id: Some(refund_data.id),
                             status_code: item.http_code,
+                            issuer_error_code: None,
+                            issuer_error_message: None,
                         })
                     } else {
                         Ok(RefundsResponseData {
@@ -1079,7 +1097,8 @@ impl TryFrom<RefundsResponseRouterData<RSync, BraintreeRSyncResponse>>
     ) -> Result<Self, Self::Error> {
         match item.response {
             BraintreeRSyncResponse::ErrorResponse(error_response) => Ok(Self {
-                response: build_error_response(&error_response.errors, item.http_code),
+                response: build_error_response(&error_response.errors, item.http_code)
+                    .map_err(|err| *err),
                 ..item.data
             }),
             BraintreeRSyncResponse::RSyncResponse(rsync_response) => {
@@ -1241,6 +1260,7 @@ impl<F, T> TryFrom<ResponseRouterData<F, BraintreeTokenResponse, T, PaymentsResp
             response: match item.response {
                 BraintreeTokenResponse::ErrorResponse(error_response) => {
                     build_error_response(error_response.errors.as_ref(), item.http_code)
+                        .map_err(|err| *err)
                 }
 
                 BraintreeTokenResponse::TokenResponse(token_response) => {
@@ -1332,6 +1352,8 @@ impl TryFrom<PaymentsCaptureResponseRouterData<BraintreeCaptureResponse>>
                         attempt_status: None,
                         connector_transaction_id: Some(transaction_data.id),
                         status_code: item.http_code,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     })
                 } else {
                     Ok(PaymentsResponseData::TransactionResponse {
@@ -1352,7 +1374,8 @@ impl TryFrom<PaymentsCaptureResponseRouterData<BraintreeCaptureResponse>>
                 })
             }
             BraintreeCaptureResponse::ErrorResponse(error_data) => Ok(Self {
-                response: build_error_response(&error_data.errors, item.http_code),
+                response: build_error_response(&error_data.errors, item.http_code)
+                    .map_err(|err| *err),
                 ..item.data
             }),
         }
@@ -1417,6 +1440,7 @@ impl<F>
             response: match item.response {
                 BraintreeRevokeMandateResponse::ErrorResponse(error_response) => {
                     build_error_response(error_response.errors.as_ref(), item.http_code)
+                        .map_err(|err| *err)
                 }
                 BraintreeRevokeMandateResponse::RevokeMandateResponse(..) => {
                     Ok(MandateRevokeResponseData {
@@ -1515,7 +1539,8 @@ impl<F, T> TryFrom<ResponseRouterData<F, BraintreeCancelResponse, T, PaymentsRes
     ) -> Result<Self, Self::Error> {
         match item.response {
             BraintreeCancelResponse::ErrorResponse(error_response) => Ok(Self {
-                response: build_error_response(&error_response.errors, item.http_code),
+                response: build_error_response(&error_response.errors, item.http_code)
+                    .map_err(|err| *err),
                 ..item.data
             }),
             BraintreeCancelResponse::CancelResponse(void_response) => {
@@ -1529,6 +1554,8 @@ impl<F, T> TryFrom<ResponseRouterData<F, BraintreeCancelResponse, T, PaymentsRes
                         attempt_status: None,
                         connector_transaction_id: None,
                         status_code: item.http_code,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     })
                 } else {
                     Ok(PaymentsResponseData::TransactionResponse {
@@ -1611,7 +1638,8 @@ impl<F, T> TryFrom<ResponseRouterData<F, BraintreePSyncResponse, T, PaymentsResp
     ) -> Result<Self, Self::Error> {
         match item.response {
             BraintreePSyncResponse::ErrorResponse(error_response) => Ok(Self {
-                response: build_error_response(&error_response.errors, item.http_code),
+                response: build_error_response(&error_response.errors, item.http_code)
+                    .map_err(|err| *err),
                 ..item.data
             }),
             BraintreePSyncResponse::SuccessResponse(psync_response) => {
@@ -1631,6 +1659,8 @@ impl<F, T> TryFrom<ResponseRouterData<F, BraintreePSyncResponse, T, PaymentsResp
                         attempt_status: None,
                         connector_transaction_id: None,
                         status_code: item.http_code,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     })
                 } else {
                     Ok(PaymentsResponseData::TransactionResponse {
diff --git a/crates/hyperswitch_connectors/src/connectors/cashtocode.rs b/crates/hyperswitch_connectors/src/connectors/cashtocode.rs
index a2a8cf9df65..edd6e54e0ce 100644
--- a/crates/hyperswitch_connectors/src/connectors/cashtocode.rs
+++ b/crates/hyperswitch_connectors/src/connectors/cashtocode.rs
@@ -146,6 +146,8 @@ impl ConnectorCommon for Cashtocode {
             reason: Some(response.error_description),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/cashtocode/transformers.rs b/crates/hyperswitch_connectors/src/connectors/cashtocode/transformers.rs
index 209092c6b6f..684099deb05 100644
--- a/crates/hyperswitch_connectors/src/connectors/cashtocode/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/cashtocode/transformers.rs
@@ -253,6 +253,8 @@ impl<F>
                     reason: Some(error_data.error_description),
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
             ),
             CashtocodePaymentsResponse::CashtoCodeData(response_data) => {
diff --git a/crates/hyperswitch_connectors/src/connectors/chargebee.rs b/crates/hyperswitch_connectors/src/connectors/chargebee.rs
index 73eeabe4356..bde9a165b21 100644
--- a/crates/hyperswitch_connectors/src/connectors/chargebee.rs
+++ b/crates/hyperswitch_connectors/src/connectors/chargebee.rs
@@ -144,6 +144,8 @@ impl ConnectorCommon for Chargebee {
             reason: response.reason,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/checkout.rs b/crates/hyperswitch_connectors/src/connectors/checkout.rs
index 61977098476..4d151c12159 100644
--- a/crates/hyperswitch_connectors/src/connectors/checkout.rs
+++ b/crates/hyperswitch_connectors/src/connectors/checkout.rs
@@ -179,6 +179,8 @@ impl ConnectorCommon for Checkout {
                 .or(response.error_type),
             attempt_status: None,
             connector_transaction_id: response.request_id,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/checkout/transformers.rs b/crates/hyperswitch_connectors/src/connectors/checkout/transformers.rs
index 4630f00b1d5..d364e327504 100644
--- a/crates/hyperswitch_connectors/src/connectors/checkout/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/checkout/transformers.rs
@@ -705,6 +705,8 @@ impl TryFrom<PaymentsResponseRouterData<PaymentsResponse>> for PaymentsAuthorize
                 reason: item.response.response_summary,
                 attempt_status: None,
                 connector_transaction_id: Some(item.response.id.clone()),
+                issuer_error_code: None,
+                issuer_error_message: None,
             })
         } else {
             None
@@ -757,6 +759,8 @@ impl TryFrom<PaymentsSyncResponseRouterData<PaymentsResponse>> for PaymentsSyncR
                 reason: item.response.response_summary,
                 attempt_status: None,
                 connector_transaction_id: Some(item.response.id.clone()),
+                issuer_error_code: None,
+                issuer_error_message: None,
             })
         } else {
             None
diff --git a/crates/hyperswitch_connectors/src/connectors/coinbase.rs b/crates/hyperswitch_connectors/src/connectors/coinbase.rs
index cfdac514847..9e998abebbc 100644
--- a/crates/hyperswitch_connectors/src/connectors/coinbase.rs
+++ b/crates/hyperswitch_connectors/src/connectors/coinbase.rs
@@ -135,6 +135,8 @@ impl ConnectorCommon for Coinbase {
             reason: response.error.code,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/coingate.rs b/crates/hyperswitch_connectors/src/connectors/coingate.rs
index 81bb9116950..e426dcb2384 100644
--- a/crates/hyperswitch_connectors/src/connectors/coingate.rs
+++ b/crates/hyperswitch_connectors/src/connectors/coingate.rs
@@ -142,6 +142,8 @@ impl ConnectorCommon for Coingate {
             reason: Some(response.reason),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/cryptopay.rs b/crates/hyperswitch_connectors/src/connectors/cryptopay.rs
index 2650d8f1e91..4c24018fcbc 100644
--- a/crates/hyperswitch_connectors/src/connectors/cryptopay.rs
+++ b/crates/hyperswitch_connectors/src/connectors/cryptopay.rs
@@ -193,6 +193,8 @@ impl ConnectorCommon for Cryptopay {
             reason: response.error.reason,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/cryptopay/transformers.rs b/crates/hyperswitch_connectors/src/connectors/cryptopay/transformers.rs
index 98d3dd76cdd..67a67c8878d 100644
--- a/crates/hyperswitch_connectors/src/connectors/cryptopay/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/cryptopay/transformers.rs
@@ -175,6 +175,8 @@ impl<F, T>
                 status_code: item.http_code,
                 attempt_status: None,
                 connector_transaction_id: Some(payment_response.id.clone()),
+                issuer_error_code: None,
+                issuer_error_message: None,
             })
         } else {
             let redirection_data = item
diff --git a/crates/hyperswitch_connectors/src/connectors/cybersource.rs b/crates/hyperswitch_connectors/src/connectors/cybersource.rs
index 812d0391dec..8b5e748906f 100644
--- a/crates/hyperswitch_connectors/src/connectors/cybersource.rs
+++ b/crates/hyperswitch_connectors/src/connectors/cybersource.rs
@@ -239,6 +239,8 @@ impl ConnectorCommon for Cybersource {
                     reason,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 })
             }
             Ok(transformers::CybersourceErrorResponse::AuthenticationError(response)) => {
@@ -251,6 +253,8 @@ impl ConnectorCommon for Cybersource {
                     reason: Some(response.response.rmsg),
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 })
             }
             Ok(transformers::CybersourceErrorResponse::NotAvailableError(response)) => {
@@ -275,6 +279,8 @@ impl ConnectorCommon for Cybersource {
                     reason: Some(error_response),
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 })
             }
             Err(error_msg) => {
@@ -506,6 +512,8 @@ impl ConnectorIntegration<SetupMandate, SetupMandateRequestData, PaymentsRespons
                 .unwrap_or(hyperswitch_interfaces::consts::NO_ERROR_MESSAGE.to_string()),
             attempt_status,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -586,6 +594,8 @@ impl ConnectorIntegration<MandateRevoke, MandateRevokeRequestData, MandateRevoke
                     status_code: res.status_code,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..data.clone()
             })
@@ -823,6 +833,8 @@ impl ConnectorIntegration<Capture, PaymentsCaptureData, PaymentsResponseData> fo
                 .unwrap_or(hyperswitch_interfaces::consts::NO_ERROR_MESSAGE.to_string()),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -1058,6 +1070,8 @@ impl ConnectorIntegration<Authorize, PaymentsAuthorizeData, PaymentsResponseData
                 .unwrap_or(hyperswitch_interfaces::consts::NO_ERROR_MESSAGE.to_string()),
             attempt_status,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -1172,6 +1186,8 @@ impl ConnectorIntegration<PoFulfill, PayoutsData, PayoutsResponseData> for Cyber
                 .unwrap_or(hyperswitch_interfaces::consts::NO_ERROR_MESSAGE.to_string()),
             attempt_status,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -1294,6 +1310,8 @@ impl ConnectorIntegration<CompleteAuthorize, CompleteAuthorizeData, PaymentsResp
                 .unwrap_or(hyperswitch_interfaces::consts::NO_ERROR_MESSAGE.to_string()),
             attempt_status,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -1415,6 +1433,8 @@ impl ConnectorIntegration<Void, PaymentsCancelData, PaymentsResponseData> for Cy
                 .unwrap_or(hyperswitch_interfaces::consts::NO_ERROR_MESSAGE.to_string()),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/cybersource/transformers.rs b/crates/hyperswitch_connectors/src/connectors/cybersource/transformers.rs
index ea5d9b25f84..2a0ebdc9f79 100644
--- a/crates/hyperswitch_connectors/src/connectors/cybersource/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/cybersource/transformers.rs
@@ -2679,10 +2679,10 @@ fn get_error_response_if_failure(
 
 fn get_payment_response(
     (info_response, status, http_code): (&CybersourcePaymentsResponse, enums::AttemptStatus, u16),
-) -> Result<PaymentsResponseData, ErrorResponse> {
+) -> Result<PaymentsResponseData, Box<ErrorResponse>> {
     let error_response = get_error_response_if_failure((info_response, status, http_code));
     match error_response {
-        Some(error) => Err(error),
+        Some(error) => Err(Box::new(error)),
         None => {
             let incremental_authorization_allowed =
                 Some(status == enums::AttemptStatus::Authorized);
@@ -2747,7 +2747,8 @@ impl
                 .unwrap_or(CybersourcePaymentStatus::StatusNotReceived),
             item.data.request.is_auto_capture()?,
         );
-        let response = get_payment_response((&item.response, status, item.http_code));
+        let response =
+            get_payment_response((&item.response, status, item.http_code)).map_err(|err| *err);
         let connector_response = item
             .response
             .processor_information
@@ -2845,6 +2846,8 @@ impl<F>
                         status_code: item.http_code,
                         attempt_status: None,
                         connector_transaction_id: Some(error_response.id.clone()),
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     }),
                     status: enums::AttemptStatus::AuthenticationFailed,
                     ..item.data
@@ -3255,6 +3258,8 @@ impl<F>
                     status_code: item.http_code,
                     attempt_status: None,
                     connector_transaction_id: Some(error_response.id.clone()),
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 });
                 Ok(Self {
                     response,
@@ -3292,7 +3297,8 @@ impl<F>
                 .unwrap_or(CybersourcePaymentStatus::StatusNotReceived),
             item.data.request.is_auto_capture()?,
         );
-        let response = get_payment_response((&item.response, status, item.http_code));
+        let response =
+            get_payment_response((&item.response, status, item.http_code)).map_err(|err| *err);
         let connector_response = item
             .response
             .processor_information
@@ -3348,7 +3354,8 @@ impl<F>
                 .unwrap_or(CybersourcePaymentStatus::StatusNotReceived),
             true,
         );
-        let response = get_payment_response((&item.response, status, item.http_code));
+        let response =
+            get_payment_response((&item.response, status, item.http_code)).map_err(|err| *err);
         Ok(Self {
             status,
             response,
@@ -3383,7 +3390,8 @@ impl<F>
                 .unwrap_or(CybersourcePaymentStatus::StatusNotReceived),
             false,
         );
-        let response = get_payment_response((&item.response, status, item.http_code));
+        let response =
+            get_payment_response((&item.response, status, item.http_code)).map_err(|err| *err);
         Ok(Self {
             status,
             response,
@@ -4131,6 +4139,8 @@ pub fn get_error_response(
         status_code,
         attempt_status,
         connector_transaction_id: Some(transaction_id),
+        issuer_error_code: None,
+        issuer_error_message: None,
     }
 }
 
diff --git a/crates/hyperswitch_connectors/src/connectors/datatrans.rs b/crates/hyperswitch_connectors/src/connectors/datatrans.rs
index f06d7be8693..0f82ae28d8f 100644
--- a/crates/hyperswitch_connectors/src/connectors/datatrans.rs
+++ b/crates/hyperswitch_connectors/src/connectors/datatrans.rs
@@ -153,6 +153,8 @@ impl ConnectorCommon for Datatrans {
                 reason: Some(response),
                 attempt_status: None,
                 connector_transaction_id: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             })
         } else {
             let response: datatrans::DatatransErrorResponse = res
@@ -168,6 +170,8 @@ impl ConnectorCommon for Datatrans {
                 reason: Some(response.error.message.clone()),
                 attempt_status: None,
                 connector_transaction_id: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             })
         }
     }
diff --git a/crates/hyperswitch_connectors/src/connectors/datatrans/transformers.rs b/crates/hyperswitch_connectors/src/connectors/datatrans/transformers.rs
index 9297f783d3e..8299b0387ae 100644
--- a/crates/hyperswitch_connectors/src/connectors/datatrans/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/datatrans/transformers.rs
@@ -560,6 +560,8 @@ impl<F>
                 attempt_status: None,
                 connector_transaction_id: None,
                 status_code: item.http_code,
+                issuer_error_code: None,
+                issuer_error_message: None,
             }),
             DatatransResponse::TransactionResponse(response) => {
                 Ok(PaymentsResponseData::TransactionResponse {
@@ -629,6 +631,8 @@ impl<F>
                 attempt_status: None,
                 connector_transaction_id: None,
                 status_code: item.http_code,
+                issuer_error_code: None,
+                issuer_error_message: None,
             }),
             DatatransResponse::TransactionResponse(response) => {
                 Ok(PaymentsResponseData::TransactionResponse {
@@ -704,6 +708,8 @@ impl TryFrom<RefundsResponseRouterData<Execute, DatatransRefundsResponse>>
                     attempt_status: None,
                     connector_transaction_id: None,
                     status_code: item.http_code,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..item.data
             }),
@@ -733,6 +739,8 @@ impl TryFrom<RefundsResponseRouterData<RSync, DatatransSyncResponse>>
                 attempt_status: None,
                 connector_transaction_id: None,
                 status_code: item.http_code,
+                issuer_error_code: None,
+                issuer_error_message: None,
             }),
             DatatransSyncResponse::Response(response) => Ok(RefundsResponseData {
                 connector_refund_id: response.transaction_id.to_string(),
@@ -762,6 +770,8 @@ impl TryFrom<PaymentsSyncResponseRouterData<DatatransSyncResponse>>
                     attempt_status: None,
                     connector_transaction_id: None,
                     status_code: item.http_code,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 });
                 Ok(Self {
                     response,
@@ -785,6 +795,8 @@ impl TryFrom<PaymentsSyncResponseRouterData<DatatransSyncResponse>>
                         status_code: item.http_code,
                         attempt_status: None,
                         connector_transaction_id: None,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     })
                 } else {
                     let mandate_reference = sync_response
diff --git a/crates/hyperswitch_connectors/src/connectors/deutschebank.rs b/crates/hyperswitch_connectors/src/connectors/deutschebank.rs
index b481c3e808d..0972eb63b9e 100644
--- a/crates/hyperswitch_connectors/src/connectors/deutschebank.rs
+++ b/crates/hyperswitch_connectors/src/connectors/deutschebank.rs
@@ -174,6 +174,8 @@ impl ConnectorCommon for Deutschebank {
             reason: Some(response.message),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -304,6 +306,8 @@ impl ConnectorIntegration<AccessTokenAuth, AccessTokenRequestData, AccessToken>
                 reason: Some(response.message),
                 attempt_status: None,
                 connector_transaction_id: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             }),
             deutschebank::DeutschebankError::AccessTokenErrorResponse(response) => {
                 Ok(ErrorResponse {
@@ -313,6 +317,8 @@ impl ConnectorIntegration<AccessTokenAuth, AccessTokenRequestData, AccessToken>
                     reason: Some(response.description),
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 })
             }
         }
diff --git a/crates/hyperswitch_connectors/src/connectors/deutschebank/transformers.rs b/crates/hyperswitch_connectors/src/connectors/deutschebank/transformers.rs
index bf8a7fc9528..bee5d8662e1 100644
--- a/crates/hyperswitch_connectors/src/connectors/deutschebank/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/deutschebank/transformers.rs
@@ -444,7 +444,8 @@ impl
                     reason: Some("METHOD_REQUIRED Flow is not currently supported for deutschebank 3ds payments".to_owned()),
                     status_code: item.http_code,
                     attempt_status: None,
-                    connector_transaction_id: None,
+                    connector_transaction_id: None,issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..item.data
             }),
@@ -514,6 +515,8 @@ fn get_error_response(error_code: String, error_reason: String, status_code: u16
         status_code,
         attempt_status: None,
         connector_transaction_id: None,
+        issuer_error_code: None,
+        issuer_error_message: None,
     }
 }
 
diff --git a/crates/hyperswitch_connectors/src/connectors/digitalvirgo.rs b/crates/hyperswitch_connectors/src/connectors/digitalvirgo.rs
index a58a086f5e7..55294d6a588 100644
--- a/crates/hyperswitch_connectors/src/connectors/digitalvirgo.rs
+++ b/crates/hyperswitch_connectors/src/connectors/digitalvirgo.rs
@@ -161,6 +161,8 @@ impl ConnectorCommon for Digitalvirgo {
             reason: response.description,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/dlocal.rs b/crates/hyperswitch_connectors/src/connectors/dlocal.rs
index 60813a4ea08..965575bbe17 100644
--- a/crates/hyperswitch_connectors/src/connectors/dlocal.rs
+++ b/crates/hyperswitch_connectors/src/connectors/dlocal.rs
@@ -152,6 +152,8 @@ impl ConnectorCommon for Dlocal {
             reason: response.param,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/elavon/transformers.rs b/crates/hyperswitch_connectors/src/connectors/elavon/transformers.rs
index a11c608d69f..861ff22e60f 100644
--- a/crates/hyperswitch_connectors/src/connectors/elavon/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/elavon/transformers.rs
@@ -214,6 +214,8 @@ impl<F>
                 attempt_status: None,
                 connector_transaction_id: None,
                 status_code: item.http_code,
+                issuer_error_code: None,
+                issuer_error_message: None,
             }),
             ElavonPaymentsResponse::Success(response) => {
                 if status == enums::AttemptStatus::Failure {
@@ -224,6 +226,8 @@ impl<F>
                         attempt_status: None,
                         connector_transaction_id: Some(response.ssl_txn_id.clone()),
                         status_code: item.http_code,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     })
                 } else {
                     Ok(PaymentsResponseData::TransactionResponse {
@@ -428,6 +432,8 @@ impl TryFrom<PaymentsCaptureResponseRouterData<ElavonPaymentsResponse>>
                 attempt_status: None,
                 connector_transaction_id: None,
                 status_code: item.http_code,
+                issuer_error_code: None,
+                issuer_error_message: None,
             }),
             ElavonPaymentsResponse::Success(response) => {
                 if status == enums::AttemptStatus::Failure {
@@ -438,6 +444,8 @@ impl TryFrom<PaymentsCaptureResponseRouterData<ElavonPaymentsResponse>>
                         attempt_status: None,
                         connector_transaction_id: None,
                         status_code: item.http_code,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     })
                 } else {
                     Ok(PaymentsResponseData::TransactionResponse {
@@ -478,6 +486,8 @@ impl TryFrom<RefundsResponseRouterData<Execute, ElavonPaymentsResponse>>
                 attempt_status: None,
                 connector_transaction_id: None,
                 status_code: item.http_code,
+                issuer_error_code: None,
+                issuer_error_message: None,
             }),
             ElavonPaymentsResponse::Success(response) => {
                 if status == enums::RefundStatus::Failure {
@@ -488,6 +498,8 @@ impl TryFrom<RefundsResponseRouterData<Execute, ElavonPaymentsResponse>>
                         attempt_status: None,
                         connector_transaction_id: None,
                         status_code: item.http_code,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     })
                 } else {
                     Ok(RefundsResponseData {
diff --git a/crates/hyperswitch_connectors/src/connectors/fiserv.rs b/crates/hyperswitch_connectors/src/connectors/fiserv.rs
index 50eebb99518..14374a8e18a 100644
--- a/crates/hyperswitch_connectors/src/connectors/fiserv.rs
+++ b/crates/hyperswitch_connectors/src/connectors/fiserv.rs
@@ -178,6 +178,8 @@ impl ConnectorCommon for Fiserv {
                     status_code: res.status_code,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 })
             })
             .unwrap_or(ErrorResponse {
@@ -187,6 +189,8 @@ impl ConnectorCommon for Fiserv {
                 status_code: res.status_code,
                 attempt_status: None,
                 connector_transaction_id: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             }))
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/fiservemea.rs b/crates/hyperswitch_connectors/src/connectors/fiservemea.rs
index b124949c078..d129ed69554 100644
--- a/crates/hyperswitch_connectors/src/connectors/fiservemea.rs
+++ b/crates/hyperswitch_connectors/src/connectors/fiservemea.rs
@@ -236,6 +236,8 @@ impl ConnectorCommon for Fiservemea {
                     },
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 })
             }
             None => Ok(ErrorResponse {
@@ -248,6 +250,8 @@ impl ConnectorCommon for Fiservemea {
                 reason: response.response_type,
                 attempt_status: None,
                 connector_transaction_id: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             }),
         }
     }
diff --git a/crates/hyperswitch_connectors/src/connectors/fiuu.rs b/crates/hyperswitch_connectors/src/connectors/fiuu.rs
index 7e9bb8c120c..4069d6af8f9 100644
--- a/crates/hyperswitch_connectors/src/connectors/fiuu.rs
+++ b/crates/hyperswitch_connectors/src/connectors/fiuu.rs
@@ -235,6 +235,8 @@ impl ConnectorCommon for Fiuu {
             reason: Some(response.error_desc.clone()),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/fiuu/transformers.rs b/crates/hyperswitch_connectors/src/connectors/fiuu/transformers.rs
index 8b1296a0159..181574b54bb 100644
--- a/crates/hyperswitch_connectors/src/connectors/fiuu/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/fiuu/transformers.rs
@@ -828,6 +828,8 @@ impl<F>
                     status_code: item.http_code,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..item.data
             }),
@@ -898,6 +900,8 @@ impl<F>
                             status_code: item.http_code,
                             attempt_status: None,
                             connector_transaction_id: Some(data.txn_id),
+                            issuer_error_code: None,
+                            issuer_error_message: None,
                         })
                     } else {
                         Ok(PaymentsResponseData::TransactionResponse {
@@ -944,6 +948,8 @@ impl<F>
                                 status_code: item.http_code,
                                 attempt_status: None,
                                 connector_transaction_id: recurring_response.tran_id.clone(),
+                                issuer_error_code: None,
+                                issuer_error_message: None,
                             })
                         } else {
                             Ok(PaymentsResponseData::TransactionResponse {
@@ -1077,6 +1083,8 @@ impl TryFrom<RefundsResponseRouterData<Execute, FiuuRefundResponse>>
                     status_code: item.http_code,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..item.data
             }),
@@ -1101,6 +1109,8 @@ impl TryFrom<RefundsResponseRouterData<Execute, FiuuRefundResponse>>
                             status_code: item.http_code,
                             attempt_status: None,
                             connector_transaction_id: Some(refund_data.refund_id.to_string()),
+                            issuer_error_code: None,
+                            issuer_error_message: None,
                         }),
                         ..item.data
                     })
@@ -1240,6 +1250,8 @@ impl TryFrom<PaymentsSyncResponseRouterData<FiuuPaymentResponse>> for PaymentsSy
                         reason: response.error_desc,
                         attempt_status: Some(enums::AttemptStatus::Failure),
                         connector_transaction_id: Some(txn_id.clone()),
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     })
                 } else {
                     None
@@ -1305,6 +1317,8 @@ impl TryFrom<PaymentsSyncResponseRouterData<FiuuPaymentResponse>> for PaymentsSy
                         reason: response.error_desc.clone(),
                         attempt_status: Some(enums::AttemptStatus::Failure),
                         connector_transaction_id: Some(txn_id.clone()),
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     })
                 } else {
                     None
@@ -1474,6 +1488,8 @@ impl TryFrom<PaymentsCaptureResponseRouterData<PaymentCaptureResponse>>
                 ),
                 attempt_status: None,
                 connector_transaction_id: Some(item.response.tran_id.clone()),
+                issuer_error_code: None,
+                issuer_error_message: None,
             })
         } else {
             None
@@ -1587,6 +1603,8 @@ impl TryFrom<PaymentsCancelResponseRouterData<FiuuPaymentCancelResponse>>
                 ),
                 attempt_status: None,
                 connector_transaction_id: Some(item.response.tran_id.clone()),
+                issuer_error_code: None,
+                issuer_error_message: None,
             })
         } else {
             None
@@ -1682,6 +1700,8 @@ impl TryFrom<RefundsResponseRouterData<RSync, FiuuRefundSyncResponse>>
                     status_code: item.http_code,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..item.data
             }),
diff --git a/crates/hyperswitch_connectors/src/connectors/forte.rs b/crates/hyperswitch_connectors/src/connectors/forte.rs
index 1068922faa7..2356fae53c3 100644
--- a/crates/hyperswitch_connectors/src/connectors/forte.rs
+++ b/crates/hyperswitch_connectors/src/connectors/forte.rs
@@ -165,6 +165,8 @@ impl ConnectorCommon for Forte {
             reason: None,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/getnet.rs b/crates/hyperswitch_connectors/src/connectors/getnet.rs
index 557dfbeaca3..0f0ee9e32c3 100644
--- a/crates/hyperswitch_connectors/src/connectors/getnet.rs
+++ b/crates/hyperswitch_connectors/src/connectors/getnet.rs
@@ -144,6 +144,8 @@ impl ConnectorCommon for Getnet {
             reason: response.reason,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/globalpay.rs b/crates/hyperswitch_connectors/src/connectors/globalpay.rs
index 6d233bcfc33..641e9fd5f3d 100644
--- a/crates/hyperswitch_connectors/src/connectors/globalpay.rs
+++ b/crates/hyperswitch_connectors/src/connectors/globalpay.rs
@@ -148,6 +148,8 @@ impl ConnectorCommon for Globalpay {
             reason: None,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -376,6 +378,8 @@ impl ConnectorIntegration<AccessTokenAuth, AccessTokenRequestData, AccessToken>
             reason: None,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/globalpay/transformers.rs b/crates/hyperswitch_connectors/src/connectors/globalpay/transformers.rs
index 27ff359a7ad..57cf5d0f287 100644
--- a/crates/hyperswitch_connectors/src/connectors/globalpay/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/globalpay/transformers.rs
@@ -268,7 +268,7 @@ fn get_payment_response(
     status: common_enums::AttemptStatus,
     response: GlobalpayPaymentsResponse,
     redirection_data: Option<RedirectForm>,
-) -> Result<PaymentsResponseData, ErrorResponse> {
+) -> Result<PaymentsResponseData, Box<ErrorResponse>> {
     let mandate_reference = response.payment_method.as_ref().and_then(|pm| {
         pm.card
             .as_ref()
@@ -281,13 +281,13 @@ fn get_payment_response(
             })
     });
     match status {
-        common_enums::AttemptStatus::Failure => Err(ErrorResponse {
+        common_enums::AttemptStatus::Failure => Err(Box::new(ErrorResponse {
             message: response
                 .payment_method
                 .and_then(|pm| pm.message)
                 .unwrap_or_else(|| NO_ERROR_MESSAGE.to_string()),
             ..Default::default()
-        }),
+        })),
         _ => Ok(PaymentsResponseData::TransactionResponse {
             resource_id: ResponseId::ConnectorTransactionId(response.id),
             redirection_data: Box::new(redirection_data),
@@ -327,7 +327,8 @@ impl<F, T> TryFrom<ResponseRouterData<F, GlobalpayPaymentsResponse, T, PaymentsR
         let redirection_data = redirect_url.map(|url| RedirectForm::from((url, Method::Get)));
         Ok(Self {
             status,
-            response: get_payment_response(status, item.response, redirection_data),
+            response: get_payment_response(status, item.response, redirection_data)
+                .map_err(|err| *err),
             ..item.data
         })
     }
diff --git a/crates/hyperswitch_connectors/src/connectors/globepay.rs b/crates/hyperswitch_connectors/src/connectors/globepay.rs
index f11b7b5977f..cca5e99bccd 100644
--- a/crates/hyperswitch_connectors/src/connectors/globepay.rs
+++ b/crates/hyperswitch_connectors/src/connectors/globepay.rs
@@ -154,6 +154,8 @@ impl ConnectorCommon for Globepay {
             reason: Some(response.return_msg),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/globepay/transformers.rs b/crates/hyperswitch_connectors/src/connectors/globepay/transformers.rs
index a3c027cb5a2..89686f199ad 100644
--- a/crates/hyperswitch_connectors/src/connectors/globepay/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/globepay/transformers.rs
@@ -325,6 +325,8 @@ fn get_error_response(
         status_code,
         attempt_status: None,
         connector_transaction_id: None,
+        issuer_error_code: None,
+        issuer_error_message: None,
     }
 }
 
diff --git a/crates/hyperswitch_connectors/src/connectors/gocardless.rs b/crates/hyperswitch_connectors/src/connectors/gocardless.rs
index a953e01dce0..a36ffdd9e34 100644
--- a/crates/hyperswitch_connectors/src/connectors/gocardless.rs
+++ b/crates/hyperswitch_connectors/src/connectors/gocardless.rs
@@ -158,6 +158,8 @@ impl ConnectorCommon for Gocardless {
             reason: Some(error_reason.join("; ")),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/helcim.rs b/crates/hyperswitch_connectors/src/connectors/helcim.rs
index 79b950063c3..65927bb0f35 100644
--- a/crates/hyperswitch_connectors/src/connectors/helcim.rs
+++ b/crates/hyperswitch_connectors/src/connectors/helcim.rs
@@ -181,6 +181,8 @@ impl ConnectorCommon for Helcim {
             reason: Some(error_string),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/hipay.rs b/crates/hyperswitch_connectors/src/connectors/hipay.rs
index 1575e361a5b..be1a829efb3 100644
--- a/crates/hyperswitch_connectors/src/connectors/hipay.rs
+++ b/crates/hyperswitch_connectors/src/connectors/hipay.rs
@@ -244,6 +244,8 @@ impl ConnectorCommon for Hipay {
             reason: response.description,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/hipay/transformers.rs b/crates/hyperswitch_connectors/src/connectors/hipay/transformers.rs
index cefa332bc8f..b121b0698cd 100644
--- a/crates/hyperswitch_connectors/src/connectors/hipay/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/hipay/transformers.rs
@@ -582,6 +582,8 @@ impl TryFrom<PaymentsSyncResponseRouterData<HipaySyncResponse>> for PaymentsSync
                     attempt_status: None,
                     connector_transaction_id: None,
                     status_code: item.http_code,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 });
                 Ok(Self {
                     status: enums::AttemptStatus::Failure,
@@ -606,6 +608,8 @@ impl TryFrom<PaymentsSyncResponseRouterData<HipaySyncResponse>> for PaymentsSync
                         status_code: item.http_code,
                         attempt_status: None,
                         connector_transaction_id: None,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     })
                 } else {
                     Ok(PaymentsResponseData::TransactionResponse {
diff --git a/crates/hyperswitch_connectors/src/connectors/iatapay.rs b/crates/hyperswitch_connectors/src/connectors/iatapay.rs
index f9ab2f3159f..b5ea844fb2e 100644
--- a/crates/hyperswitch_connectors/src/connectors/iatapay.rs
+++ b/crates/hyperswitch_connectors/src/connectors/iatapay.rs
@@ -155,6 +155,8 @@ impl ConnectorCommon for Iatapay {
                 reason: Some(CONNECTOR_UNAUTHORIZED_ERROR.to_string()),
                 attempt_status: None,
                 connector_transaction_id: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             }
         } else {
             let response: iatapay::IatapayErrorResponse = res
@@ -171,6 +173,8 @@ impl ConnectorCommon for Iatapay {
                 reason: response.reason,
                 attempt_status: None,
                 connector_transaction_id: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             }
         };
         Ok(response_error_message)
@@ -288,6 +292,8 @@ impl ConnectorIntegration<AccessTokenAuth, AccessTokenRequestData, AccessToken>
             reason: None,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/iatapay/transformers.rs b/crates/hyperswitch_connectors/src/connectors/iatapay/transformers.rs
index e41057fb8e6..0c5c9fc6786 100644
--- a/crates/hyperswitch_connectors/src/connectors/iatapay/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/iatapay/transformers.rs
@@ -343,6 +343,8 @@ fn get_iatpay_response(
             status_code,
             attempt_status: Some(status),
             connector_transaction_id: response.iata_payment_id.clone(),
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     } else {
         None
@@ -527,6 +529,8 @@ impl TryFrom<RefundsResponseRouterData<Execute, RefundResponse>> for RefundsRout
                 status_code: item.http_code,
                 attempt_status: None,
                 connector_transaction_id: Some(item.response.iata_refund_id.clone()),
+                issuer_error_code: None,
+                issuer_error_message: None,
             })
         } else {
             Ok(RefundsResponseData {
@@ -563,6 +567,8 @@ impl TryFrom<RefundsResponseRouterData<RSync, RefundResponse>> for RefundsRouter
                 status_code: item.http_code,
                 attempt_status: None,
                 connector_transaction_id: Some(item.response.iata_refund_id.clone()),
+                issuer_error_code: None,
+                issuer_error_message: None,
             })
         } else {
             Ok(RefundsResponseData {
diff --git a/crates/hyperswitch_connectors/src/connectors/inespay.rs b/crates/hyperswitch_connectors/src/connectors/inespay.rs
index 41ae798ade3..e0bd27d47b1 100644
--- a/crates/hyperswitch_connectors/src/connectors/inespay.rs
+++ b/crates/hyperswitch_connectors/src/connectors/inespay.rs
@@ -151,6 +151,8 @@ impl ConnectorCommon for Inespay {
             reason: None,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/inespay/transformers.rs b/crates/hyperswitch_connectors/src/connectors/inespay/transformers.rs
index 3922929892e..508e91438ef 100644
--- a/crates/hyperswitch_connectors/src/connectors/inespay/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/inespay/transformers.rs
@@ -142,6 +142,8 @@ impl<F, T> TryFrom<ResponseRouterData<F, InespayPaymentsResponse, T, PaymentsRes
                     attempt_status: None,
                     connector_transaction_id: None,
                     status_code: item.http_code,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
             ),
         };
@@ -267,6 +269,8 @@ impl<F, T> TryFrom<ResponseRouterData<F, InespayPSyncResponse, T, PaymentsRespon
                     attempt_status: None,
                     connector_transaction_id: None,
                     status_code: item.http_code,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..item.data
             }),
@@ -359,6 +363,8 @@ impl TryFrom<RefundsResponseRouterData<Execute, InespayRefundsResponse>>
                     attempt_status: None,
                     connector_transaction_id: None,
                     status_code: item.http_code,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..item.data
             }),
@@ -403,6 +409,8 @@ impl TryFrom<RefundsResponseRouterData<RSync, InespayRSyncResponse>> for Refunds
                 attempt_status: None,
                 connector_transaction_id: None,
                 status_code: item.http_code,
+                issuer_error_code: None,
+                issuer_error_message: None,
             }),
         };
         Ok(Self {
diff --git a/crates/hyperswitch_connectors/src/connectors/itaubank.rs b/crates/hyperswitch_connectors/src/connectors/itaubank.rs
index 34956ace644..e31f86b0385 100644
--- a/crates/hyperswitch_connectors/src/connectors/itaubank.rs
+++ b/crates/hyperswitch_connectors/src/connectors/itaubank.rs
@@ -176,6 +176,8 @@ impl ConnectorCommon for Itaubank {
             reason,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -296,6 +298,8 @@ impl ConnectorIntegration<AccessTokenAuth, AccessTokenRequestData, AccessToken>
             reason: response.detail.or(response.user_message),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/jpmorgan.rs b/crates/hyperswitch_connectors/src/connectors/jpmorgan.rs
index 9d6037877f2..68529f725a8 100644
--- a/crates/hyperswitch_connectors/src/connectors/jpmorgan.rs
+++ b/crates/hyperswitch_connectors/src/connectors/jpmorgan.rs
@@ -167,6 +167,8 @@ impl ConnectorCommon for Jpmorgan {
             reason: Some(response_message),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/juspaythreedsserver.rs b/crates/hyperswitch_connectors/src/connectors/juspaythreedsserver.rs
index cbe7881c536..6dd867421a9 100644
--- a/crates/hyperswitch_connectors/src/connectors/juspaythreedsserver.rs
+++ b/crates/hyperswitch_connectors/src/connectors/juspaythreedsserver.rs
@@ -187,6 +187,8 @@ impl ConnectorCommon for Juspaythreedsserver {
             reason: response.reason,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/klarna.rs b/crates/hyperswitch_connectors/src/connectors/klarna.rs
index 86ad19d7dc2..50a830fdba2 100644
--- a/crates/hyperswitch_connectors/src/connectors/klarna.rs
+++ b/crates/hyperswitch_connectors/src/connectors/klarna.rs
@@ -126,6 +126,8 @@ impl ConnectorCommon for Klarna {
             reason,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/mifinity.rs b/crates/hyperswitch_connectors/src/connectors/mifinity.rs
index 3b597597e38..eaaa94b4290 100644
--- a/crates/hyperswitch_connectors/src/connectors/mifinity.rs
+++ b/crates/hyperswitch_connectors/src/connectors/mifinity.rs
@@ -154,6 +154,8 @@ impl ConnectorCommon for Mifinity {
                 reason: Some(CONNECTOR_UNAUTHORIZED_ERROR.to_string()),
                 attempt_status: None,
                 connector_transaction_id: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             })
         } else {
             let response: Result<
@@ -189,6 +191,8 @@ impl ConnectorCommon for Mifinity {
                         ),
                         attempt_status: None,
                         connector_transaction_id: None,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     })
                 }
 
diff --git a/crates/hyperswitch_connectors/src/connectors/mollie.rs b/crates/hyperswitch_connectors/src/connectors/mollie.rs
index 325c031c33f..b043dbdd8cc 100644
--- a/crates/hyperswitch_connectors/src/connectors/mollie.rs
+++ b/crates/hyperswitch_connectors/src/connectors/mollie.rs
@@ -135,6 +135,8 @@ impl ConnectorCommon for Mollie {
             reason: response.field,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/moneris.rs b/crates/hyperswitch_connectors/src/connectors/moneris.rs
index c8f542c1bad..3562a2e838e 100644
--- a/crates/hyperswitch_connectors/src/connectors/moneris.rs
+++ b/crates/hyperswitch_connectors/src/connectors/moneris.rs
@@ -174,6 +174,8 @@ impl ConnectorCommon for Moneris {
             reason: Some(reason),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -298,6 +300,8 @@ impl ConnectorIntegration<AccessTokenAuth, AccessTokenRequestData, AccessToken>
             reason: response.error_description,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/multisafepay/transformers.rs b/crates/hyperswitch_connectors/src/connectors/multisafepay/transformers.rs
index 3e632e048a2..e11ac59e75f 100644
--- a/crates/hyperswitch_connectors/src/connectors/multisafepay/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/multisafepay/transformers.rs
@@ -1045,6 +1045,8 @@ pub fn populate_error_reason(
         status_code: http_code,
         attempt_status,
         connector_transaction_id,
+        issuer_error_code: None,
+        issuer_error_message: None,
     }
 }
 // REFUND :
@@ -1150,6 +1152,8 @@ impl TryFrom<RefundsResponseRouterData<Execute, MultisafepayRefundResponse>>
                         status_code: item.http_code,
                         attempt_status,
                         connector_transaction_id: None,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     }),
                     ..item.data
                 })
diff --git a/crates/hyperswitch_connectors/src/connectors/nexinets.rs b/crates/hyperswitch_connectors/src/connectors/nexinets.rs
index f93eef65724..69a8543286d 100644
--- a/crates/hyperswitch_connectors/src/connectors/nexinets.rs
+++ b/crates/hyperswitch_connectors/src/connectors/nexinets.rs
@@ -162,6 +162,8 @@ impl ConnectorCommon for Nexinets {
             reason: Some(connector_reason),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/nexixpay.rs b/crates/hyperswitch_connectors/src/connectors/nexixpay.rs
index 8a9c804cbf2..264bca6b5a9 100644
--- a/crates/hyperswitch_connectors/src/connectors/nexixpay.rs
+++ b/crates/hyperswitch_connectors/src/connectors/nexixpay.rs
@@ -203,6 +203,8 @@ impl ConnectorCommon for Nexixpay {
             reason: concatenated_descriptions,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/nomupay.rs b/crates/hyperswitch_connectors/src/connectors/nomupay.rs
index a6a5b0357e1..075b955be49 100644
--- a/crates/hyperswitch_connectors/src/connectors/nomupay.rs
+++ b/crates/hyperswitch_connectors/src/connectors/nomupay.rs
@@ -285,6 +285,8 @@ impl ConnectorCommon for Nomupay {
                 reason: None,
                 attempt_status: None,
                 connector_transaction_id: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             }),
             (None, None, Some(nomupay_inner_error), _, _) => {
                 match (
@@ -298,6 +300,8 @@ impl ConnectorCommon for Nomupay {
                         reason: None,
                         attempt_status: None,
                         connector_transaction_id: None,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     }),
                     (_, Some(validation_errors)) => Ok(ErrorResponse {
                         status_code: res.status_code,
@@ -314,6 +318,8 @@ impl ConnectorCommon for Nomupay {
                         ),
                         attempt_status: None,
                         connector_transaction_id: None,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     }),
                     (None, None) => Ok(ErrorResponse {
                         status_code: res.status_code,
@@ -322,6 +328,8 @@ impl ConnectorCommon for Nomupay {
                         reason: None,
                         attempt_status: None,
                         connector_transaction_id: None,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     }),
                 }
             }
@@ -335,6 +343,8 @@ impl ConnectorCommon for Nomupay {
                 reason: None,
                 attempt_status: None,
                 connector_transaction_id: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             }),
             _ => Ok(ErrorResponse {
                 status_code: res.status_code,
@@ -343,6 +353,8 @@ impl ConnectorCommon for Nomupay {
                 reason: None,
                 attempt_status: None,
                 connector_transaction_id: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             }),
         }
     }
diff --git a/crates/hyperswitch_connectors/src/connectors/noon.rs b/crates/hyperswitch_connectors/src/connectors/noon.rs
index c4f2eef275d..3f3de600063 100644
--- a/crates/hyperswitch_connectors/src/connectors/noon.rs
+++ b/crates/hyperswitch_connectors/src/connectors/noon.rs
@@ -178,6 +178,8 @@ impl ConnectorCommon for Noon {
                     reason: Some(noon_error_response.message),
                     attempt_status,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 })
             }
             Err(error_message) => {
diff --git a/crates/hyperswitch_connectors/src/connectors/noon/transformers.rs b/crates/hyperswitch_connectors/src/connectors/noon/transformers.rs
index b2128b990c1..81dc0186356 100644
--- a/crates/hyperswitch_connectors/src/connectors/noon/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/noon/transformers.rs
@@ -596,6 +596,8 @@ impl<F, T> TryFrom<ResponseRouterData<F, NoonPaymentsResponse, T, PaymentsRespon
                     status_code: item.http_code,
                     attempt_status: Some(status),
                     connector_transaction_id: Some(order.id.to_string()),
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 _ => {
                     let connector_response_reference_id =
@@ -826,6 +828,8 @@ impl TryFrom<RefundsResponseRouterData<Execute, RefundResponse>> for RefundsRout
                 reason: Some(response.message.clone()),
                 attempt_status: None,
                 connector_transaction_id: Some(response.result.transaction.id.clone()),
+                issuer_error_code: None,
+                issuer_error_message: None,
             })
         } else {
             Ok(RefundsResponseData {
@@ -892,6 +896,8 @@ impl TryFrom<RefundsResponseRouterData<RSync, RefundSyncResponse>> for RefundsRo
                 reason: Some(response.message.clone()),
                 attempt_status: None,
                 connector_transaction_id: Some(noon_transaction.id.clone()),
+                issuer_error_code: None,
+                issuer_error_message: None,
             })
         } else {
             Ok(RefundsResponseData {
diff --git a/crates/hyperswitch_connectors/src/connectors/novalnet.rs b/crates/hyperswitch_connectors/src/connectors/novalnet.rs
index 0a47c8ccfba..a6f2e2fc643 100644
--- a/crates/hyperswitch_connectors/src/connectors/novalnet.rs
+++ b/crates/hyperswitch_connectors/src/connectors/novalnet.rs
@@ -153,6 +153,8 @@ impl ConnectorCommon for Novalnet {
             reason: response.reason,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/novalnet/transformers.rs b/crates/hyperswitch_connectors/src/connectors/novalnet/transformers.rs
index 44f84bf475d..607acb37fb0 100644
--- a/crates/hyperswitch_connectors/src/connectors/novalnet/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/novalnet/transformers.rs
@@ -589,6 +589,8 @@ pub fn get_error_response(result: ResultData, status_code: u16) -> ErrorResponse
         status_code,
         attempt_status: None,
         connector_transaction_id: None,
+        issuer_error_code: None,
+        issuer_error_message: None,
     }
 }
 
diff --git a/crates/hyperswitch_connectors/src/connectors/nuvei/transformers.rs b/crates/hyperswitch_connectors/src/connectors/nuvei/transformers.rs
index 0bfd3af7e99..cbc4a244d8c 100644
--- a/crates/hyperswitch_connectors/src/connectors/nuvei/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/nuvei/transformers.rs
@@ -1543,17 +1543,14 @@ fn build_error_response<T>(
     http_code: u16,
 ) -> Option<Result<T, ErrorResponse>> {
     match response.status {
-        NuveiPaymentStatus::Error => Some(get_error_response(
-            response.err_code,
-            &response.reason,
-            http_code,
-        )),
+        NuveiPaymentStatus::Error => Some(
+            get_error_response(response.err_code, &response.reason, http_code).map_err(|err| *err),
+        ),
         _ => {
-            let err = Some(get_error_response(
-                response.gw_error_code,
-                &response.gw_error_reason,
-                http_code,
-            ));
+            let err = Some(
+                get_error_response(response.gw_error_code, &response.gw_error_reason, http_code)
+                    .map_err(|err| *err),
+            );
             match response.transaction_status {
                 Some(NuveiTransactionStatus::Error) | Some(NuveiTransactionStatus::Declined) => err,
                 _ => match response
@@ -1709,7 +1706,8 @@ impl TryFrom<RefundsResponseRouterData<Execute, NuveiPaymentsResponse>>
                 item.response
                     .transaction_id
                     .ok_or(errors::ConnectorError::MissingConnectorTransactionID)?,
-            ),
+            )
+            .map_err(|err| *err),
             ..item.data
         })
     }
@@ -1729,7 +1727,8 @@ impl TryFrom<RefundsResponseRouterData<RSync, NuveiPaymentsResponse>>
                 item.response
                     .transaction_id
                     .ok_or(errors::ConnectorError::MissingConnectorTransactionID)?,
-            ),
+            )
+            .map_err(|err| *err),
             ..item.data
         })
     }
@@ -1783,7 +1782,7 @@ fn get_refund_response(
     response: NuveiPaymentsResponse,
     http_code: u16,
     txn_id: String,
-) -> Result<RefundsResponseData, ErrorResponse> {
+) -> Result<RefundsResponseData, Box<ErrorResponse>> {
     let refund_status = response
         .transaction_status
         .clone()
@@ -1809,8 +1808,8 @@ fn get_error_response<T>(
     error_code: Option<i64>,
     error_msg: &Option<String>,
     http_code: u16,
-) -> Result<T, ErrorResponse> {
-    Err(ErrorResponse {
+) -> Result<T, Box<ErrorResponse>> {
+    Err(Box::new(ErrorResponse {
         code: error_code
             .map(|c| c.to_string())
             .unwrap_or_else(|| NO_ERROR_CODE.to_string()),
@@ -1821,7 +1820,9 @@ fn get_error_response<T>(
         status_code: http_code,
         attempt_status: None,
         connector_transaction_id: None,
-    })
+        issuer_error_code: None,
+        issuer_error_message: None,
+    }))
 }
 
 #[derive(Debug, Default, Serialize, Deserialize)]
diff --git a/crates/hyperswitch_connectors/src/connectors/opayo.rs b/crates/hyperswitch_connectors/src/connectors/opayo.rs
index b2aadda37f7..eef0da72a2c 100644
--- a/crates/hyperswitch_connectors/src/connectors/opayo.rs
+++ b/crates/hyperswitch_connectors/src/connectors/opayo.rs
@@ -139,6 +139,8 @@ impl ConnectorCommon for Opayo {
             reason: response.reason,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/opennode.rs b/crates/hyperswitch_connectors/src/connectors/opennode.rs
index fefd2f77768..56e30ac3426 100644
--- a/crates/hyperswitch_connectors/src/connectors/opennode.rs
+++ b/crates/hyperswitch_connectors/src/connectors/opennode.rs
@@ -135,6 +135,8 @@ impl ConnectorCommon for Opennode {
             reason: None,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/paybox.rs b/crates/hyperswitch_connectors/src/connectors/paybox.rs
index 395fc73808c..0c8577a29d4 100644
--- a/crates/hyperswitch_connectors/src/connectors/paybox.rs
+++ b/crates/hyperswitch_connectors/src/connectors/paybox.rs
@@ -156,6 +156,8 @@ impl ConnectorCommon for Paybox {
             reason: response.reason,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/paybox/transformers.rs b/crates/hyperswitch_connectors/src/connectors/paybox/transformers.rs
index ef4e308d968..7da6b6e95ea 100644
--- a/crates/hyperswitch_connectors/src/connectors/paybox/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/paybox/transformers.rs
@@ -715,6 +715,8 @@ impl<F, T> TryFrom<ResponseRouterData<F, PayboxCaptureResponse, T, PaymentsRespo
                     status_code: item.http_code,
                     attempt_status: None,
                     connector_transaction_id: Some(item.response.transaction_number),
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..item.data
             }),
@@ -773,6 +775,8 @@ impl<F> TryFrom<ResponseRouterData<F, PayboxResponse, PaymentsAuthorizeData, Pay
                             status_code: item.http_code,
                             attempt_status: None,
                             connector_transaction_id: Some(response.transaction_number),
+                            issuer_error_code: None,
+                            issuer_error_message: None,
                         }),
                         ..item.data
                     }),
@@ -802,6 +806,8 @@ impl<F> TryFrom<ResponseRouterData<F, PayboxResponse, PaymentsAuthorizeData, Pay
                     status_code: item.http_code,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..item.data
             }),
@@ -845,6 +851,8 @@ impl<F, T> TryFrom<ResponseRouterData<F, PayboxSyncResponse, T, PaymentsResponse
                     status_code: item.http_code,
                     attempt_status: None,
                     connector_transaction_id: Some(item.response.transaction_number),
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..item.data
             }),
@@ -933,6 +941,8 @@ impl TryFrom<RefundsResponseRouterData<RSync, PayboxSyncResponse>>
                     status_code: item.http_code,
                     attempt_status: None,
                     connector_transaction_id: Some(item.response.transaction_number),
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..item.data
             }),
@@ -964,6 +974,8 @@ impl TryFrom<RefundsResponseRouterData<Execute, TransactionResponse>>
                     status_code: item.http_code,
                     attempt_status: None,
                     connector_transaction_id: Some(item.response.transaction_number),
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..item.data
             }),
@@ -1033,6 +1045,8 @@ impl<F>
                     status_code: item.http_code,
                     attempt_status: None,
                     connector_transaction_id: Some(response.transaction_number),
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..item.data
             }),
diff --git a/crates/hyperswitch_connectors/src/connectors/payeezy.rs b/crates/hyperswitch_connectors/src/connectors/payeezy.rs
index 5621b9d1230..b6266d30d21 100644
--- a/crates/hyperswitch_connectors/src/connectors/payeezy.rs
+++ b/crates/hyperswitch_connectors/src/connectors/payeezy.rs
@@ -149,6 +149,8 @@ impl ConnectorCommon for Payeezy {
             reason: None,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/payme.rs b/crates/hyperswitch_connectors/src/connectors/payme.rs
index 9c1a94ad3c0..80dd60c172b 100644
--- a/crates/hyperswitch_connectors/src/connectors/payme.rs
+++ b/crates/hyperswitch_connectors/src/connectors/payme.rs
@@ -149,6 +149,8 @@ impl ConnectorCommon for Payme {
                     )),
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 })
             }
             Err(error_msg) => {
diff --git a/crates/hyperswitch_connectors/src/connectors/payme/transformers.rs b/crates/hyperswitch_connectors/src/connectors/payme/transformers.rs
index 8dd83d1ebd7..180d22b2a75 100644
--- a/crates/hyperswitch_connectors/src/connectors/payme/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/payme/transformers.rs
@@ -232,6 +232,8 @@ fn get_pay_sale_error_response(
         status_code: http_code,
         attempt_status: None,
         connector_transaction_id: Some(pay_sale_response.payme_sale_id.clone()),
+        issuer_error_code: None,
+        issuer_error_message: None,
     }
 }
 
@@ -314,6 +316,8 @@ fn get_sale_query_error_response(
         status_code: http_code,
         attempt_status: None,
         connector_transaction_id: Some(sale_query_response.sale_payme_id.clone()),
+        issuer_error_code: None,
+        issuer_error_message: None,
     }
 }
 
@@ -1033,6 +1037,8 @@ impl TryFrom<RefundsResponseRouterData<Execute, PaymeRefundResponse>>
                 status_code: item.http_code,
                 attempt_status: None,
                 connector_transaction_id: payme_response.payme_transaction_id.clone(),
+                issuer_error_code: None,
+                issuer_error_message: None,
             })
         } else {
             Ok(RefundsResponseData {
@@ -1104,6 +1110,8 @@ impl TryFrom<PaymentsCancelResponseRouterData<PaymeVoidResponse>> for PaymentsCa
                 status_code: item.http_code,
                 attempt_status: None,
                 connector_transaction_id: payme_response.payme_transaction_id.clone(),
+                issuer_error_code: None,
+                issuer_error_message: None,
             })
         } else {
             // Since we are not receiving payme_sale_id, we are not populating the transaction response
@@ -1158,6 +1166,8 @@ impl<F, T> TryFrom<ResponseRouterData<F, PaymeQueryTransactionResponse, T, Refun
                 status_code: item.http_code,
                 attempt_status: None,
                 connector_transaction_id: Some(pay_sale_response.payme_transaction_id.clone()),
+                issuer_error_code: None,
+                issuer_error_message: None,
             })
         } else {
             Ok(RefundsResponseData {
diff --git a/crates/hyperswitch_connectors/src/connectors/paypal.rs b/crates/hyperswitch_connectors/src/connectors/paypal.rs
index 1859deeaad1..76283fad3a2 100644
--- a/crates/hyperswitch_connectors/src/connectors/paypal.rs
+++ b/crates/hyperswitch_connectors/src/connectors/paypal.rs
@@ -178,6 +178,8 @@ impl Paypal {
             reason: error_reason.or(Some(response.message)),
             attempt_status: None,
             connector_transaction_id: response.debug_id,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -350,6 +352,8 @@ impl ConnectorCommon for Paypal {
             reason,
             attempt_status: None,
             connector_transaction_id: response.debug_id,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -488,6 +492,8 @@ impl ConnectorIntegration<AccessTokenAuth, AccessTokenRequestData, AccessToken>
             reason: Some(response.error_description),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -1235,6 +1241,8 @@ impl ConnectorIntegration<PreProcessing, PaymentsPreProcessingData, PaymentsResp
                                 .unwrap_or(paypal::AuthenticationStatus::Null),
                             )),
                             status_code: res.status_code,
+                            issuer_error_code: None,
+                            issuer_error_message: None,
                         }),
                         ..data.clone()
                     }),
diff --git a/crates/hyperswitch_connectors/src/connectors/paystack.rs b/crates/hyperswitch_connectors/src/connectors/paystack.rs
index 6d6ce2ff83a..2f15b1541a5 100644
--- a/crates/hyperswitch_connectors/src/connectors/paystack.rs
+++ b/crates/hyperswitch_connectors/src/connectors/paystack.rs
@@ -143,6 +143,8 @@ impl ConnectorCommon for Paystack {
             reason: Some(response.message),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/paystack/transformers.rs b/crates/hyperswitch_connectors/src/connectors/paystack/transformers.rs
index 2ced7d44d54..4117f689cb6 100644
--- a/crates/hyperswitch_connectors/src/connectors/paystack/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/paystack/transformers.rs
@@ -144,6 +144,8 @@ impl<F, T> TryFrom<ResponseRouterData<F, PaystackPaymentsResponse, T, PaymentsRe
                         attempt_status: None,
                         connector_transaction_id: None,
                         status_code: item.http_code,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     }),
                 )
             }
@@ -251,6 +253,8 @@ impl<F, T> TryFrom<ResponseRouterData<F, PaystackPSyncResponse, T, PaymentsRespo
                         attempt_status: None,
                         connector_transaction_id: None,
                         status_code: item.http_code,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     }),
                     ..item.data
                 })
@@ -348,6 +352,8 @@ impl TryFrom<RefundsResponseRouterData<Execute, PaystackRefundsResponse>>
                         attempt_status: None,
                         connector_transaction_id: None,
                         status_code: item.http_code,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     }),
                     ..item.data
                 })
@@ -388,6 +394,8 @@ impl TryFrom<RefundsResponseRouterData<RSync, PaystackRefundsResponse>>
                         attempt_status: None,
                         connector_transaction_id: None,
                         status_code: item.http_code,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     }),
                     ..item.data
                 })
diff --git a/crates/hyperswitch_connectors/src/connectors/payu.rs b/crates/hyperswitch_connectors/src/connectors/payu.rs
index cd8c99b6151..6d09c85d917 100644
--- a/crates/hyperswitch_connectors/src/connectors/payu.rs
+++ b/crates/hyperswitch_connectors/src/connectors/payu.rs
@@ -139,6 +139,8 @@ impl ConnectorCommon for Payu {
             reason: response.status.code_literal,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -339,6 +341,8 @@ impl ConnectorIntegration<AccessTokenAuth, AccessTokenRequestData, AccessToken>
             reason: None,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/placetopay.rs b/crates/hyperswitch_connectors/src/connectors/placetopay.rs
index 6e593c53e16..54d8ffadf34 100644
--- a/crates/hyperswitch_connectors/src/connectors/placetopay.rs
+++ b/crates/hyperswitch_connectors/src/connectors/placetopay.rs
@@ -134,6 +134,8 @@ impl ConnectorCommon for Placetopay {
             reason: Some(response.status.message),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/powertranz.rs b/crates/hyperswitch_connectors/src/connectors/powertranz.rs
index 6d88ac368a0..52db1eb49d2 100644
--- a/crates/hyperswitch_connectors/src/connectors/powertranz.rs
+++ b/crates/hyperswitch_connectors/src/connectors/powertranz.rs
@@ -147,6 +147,8 @@ impl ConnectorCommon for Powertranz {
             reason: None,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/powertranz/transformers.rs b/crates/hyperswitch_connectors/src/connectors/powertranz/transformers.rs
index 03eaa27281c..04df8ee5e54 100644
--- a/crates/hyperswitch_connectors/src/connectors/powertranz/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/powertranz/transformers.rs
@@ -459,6 +459,8 @@ fn build_error_response(item: &PowertranzBaseResponse, status_code: u16) -> Opti
                 ),
                 attempt_status: None,
                 connector_transaction_id: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             }
         })
     } else if !ISO_SUCCESS_CODES.contains(&item.iso_response_code.as_str()) {
@@ -470,6 +472,8 @@ fn build_error_response(item: &PowertranzBaseResponse, status_code: u16) -> Opti
             reason: Some(item.response_message.clone()),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     } else {
         None
diff --git a/crates/hyperswitch_connectors/src/connectors/prophetpay.rs b/crates/hyperswitch_connectors/src/connectors/prophetpay.rs
index 245eaf73e75..2518f08c69b 100644
--- a/crates/hyperswitch_connectors/src/connectors/prophetpay.rs
+++ b/crates/hyperswitch_connectors/src/connectors/prophetpay.rs
@@ -141,6 +141,8 @@ impl ConnectorCommon for Prophetpay {
             reason: Some(response.to_string()),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/prophetpay/transformers.rs b/crates/hyperswitch_connectors/src/connectors/prophetpay/transformers.rs
index cb93caded2c..28f0e4981be 100644
--- a/crates/hyperswitch_connectors/src/connectors/prophetpay/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/prophetpay/transformers.rs
@@ -425,6 +425,8 @@ impl<F>
                     status_code: item.http_code,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..item.data
             })
@@ -473,6 +475,8 @@ impl<F, T> TryFrom<ResponseRouterData<F, ProphetpaySyncResponse, T, PaymentsResp
                     status_code: item.http_code,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..item.data
             })
@@ -521,6 +525,8 @@ impl<F, T> TryFrom<ResponseRouterData<F, ProphetpayVoidResponse, T, PaymentsResp
                     status_code: item.http_code,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..item.data
             })
@@ -629,6 +635,8 @@ impl TryFrom<RefundsResponseRouterData<Execute, ProphetpayRefundResponse>>
                     status_code: item.http_code,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..item.data
             })
@@ -669,6 +677,8 @@ impl<T> TryFrom<RefundsResponseRouterData<T, ProphetpayRefundSyncResponse>>
                     status_code: item.http_code,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..item.data
             })
diff --git a/crates/hyperswitch_connectors/src/connectors/rapyd.rs b/crates/hyperswitch_connectors/src/connectors/rapyd.rs
index d5473b260f9..b777aff4d9d 100644
--- a/crates/hyperswitch_connectors/src/connectors/rapyd.rs
+++ b/crates/hyperswitch_connectors/src/connectors/rapyd.rs
@@ -140,6 +140,8 @@ impl ConnectorCommon for Rapyd {
                     reason: response_data.status.message,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 })
             }
             Err(error_msg) => {
diff --git a/crates/hyperswitch_connectors/src/connectors/rapyd/transformers.rs b/crates/hyperswitch_connectors/src/connectors/rapyd/transformers.rs
index 7d4517e00bd..236d9e55b5a 100644
--- a/crates/hyperswitch_connectors/src/connectors/rapyd/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/rapyd/transformers.rs
@@ -451,6 +451,8 @@ impl<F, T> TryFrom<ResponseRouterData<F, RapydPaymentsResponse, T, PaymentsRespo
                             reason: data.failure_message.to_owned(),
                             attempt_status: None,
                             connector_transaction_id: None,
+                            issuer_error_code: None,
+                            issuer_error_message: None,
                         }),
                     ),
                     _ => {
@@ -495,6 +497,8 @@ impl<F, T> TryFrom<ResponseRouterData<F, RapydPaymentsResponse, T, PaymentsRespo
                     reason: item.response.status.message,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
             ),
         };
diff --git a/crates/hyperswitch_connectors/src/connectors/razorpay.rs b/crates/hyperswitch_connectors/src/connectors/razorpay.rs
index 435ff983c8b..fc7cdeb69ab 100644
--- a/crates/hyperswitch_connectors/src/connectors/razorpay.rs
+++ b/crates/hyperswitch_connectors/src/connectors/razorpay.rs
@@ -160,6 +160,8 @@ impl ConnectorCommon for Razorpay {
                             ),
                             attempt_status: None,
                             connector_transaction_id: None,
+                            issuer_error_code: None,
+                            issuer_error_message: None,
                         })
                     }
                     razorpay::ErrorResponse::RazorpayStringError(error_string) => {
@@ -170,6 +172,8 @@ impl ConnectorCommon for Razorpay {
                             reason: Some(error_string.clone()),
                             attempt_status: None,
                             connector_transaction_id: None,
+                            issuer_error_code: None,
+                            issuer_error_message: None,
                         })
                     }
                 }
diff --git a/crates/hyperswitch_connectors/src/connectors/razorpay/transformers.rs b/crates/hyperswitch_connectors/src/connectors/razorpay/transformers.rs
index af9e67f8dbe..214102e42f3 100644
--- a/crates/hyperswitch_connectors/src/connectors/razorpay/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/razorpay/transformers.rs
@@ -817,6 +817,8 @@ impl<F, T> TryFrom<ResponseRouterData<F, RazorpayPaymentsResponse, T, PaymentsRe
                         status_code: item.http_code,
                         attempt_status: None,
                         connector_transaction_id: None,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     }),
                     ..item.data
                 })
@@ -1273,6 +1275,8 @@ impl TryFrom<RefundsResponseRouterData<Execute, RefundResponse>>
                 status_code: item.http_code,
                 attempt_status: None,
                 connector_transaction_id: Some(item.response.refund.unique_request_id.clone()),
+                issuer_error_code: None,
+                issuer_error_message: None,
             }),
         };
         Ok(Self {
diff --git a/crates/hyperswitch_connectors/src/connectors/recurly.rs b/crates/hyperswitch_connectors/src/connectors/recurly.rs
index c16810a6ab7..99714dd55f4 100644
--- a/crates/hyperswitch_connectors/src/connectors/recurly.rs
+++ b/crates/hyperswitch_connectors/src/connectors/recurly.rs
@@ -144,6 +144,8 @@ impl ConnectorCommon for Recurly {
             reason: response.reason,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/redsys.rs b/crates/hyperswitch_connectors/src/connectors/redsys.rs
index 501182dec07..97f4b4c4b4b 100644
--- a/crates/hyperswitch_connectors/src/connectors/redsys.rs
+++ b/crates/hyperswitch_connectors/src/connectors/redsys.rs
@@ -144,6 +144,8 @@ impl ConnectorCommon for Redsys {
             reason: response.reason,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/shift4.rs b/crates/hyperswitch_connectors/src/connectors/shift4.rs
index 0bf8c4094b1..b85c2472e58 100644
--- a/crates/hyperswitch_connectors/src/connectors/shift4.rs
+++ b/crates/hyperswitch_connectors/src/connectors/shift4.rs
@@ -140,6 +140,8 @@ impl ConnectorCommon for Shift4 {
             reason: None,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/square.rs b/crates/hyperswitch_connectors/src/connectors/square.rs
index 9615d4afdd7..6ac3420219d 100644
--- a/crates/hyperswitch_connectors/src/connectors/square.rs
+++ b/crates/hyperswitch_connectors/src/connectors/square.rs
@@ -158,6 +158,8 @@ impl ConnectorCommon for Square {
             reason: Some(reason),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/stax.rs b/crates/hyperswitch_connectors/src/connectors/stax.rs
index 27be4d309dc..57b8ce1a282 100644
--- a/crates/hyperswitch_connectors/src/connectors/stax.rs
+++ b/crates/hyperswitch_connectors/src/connectors/stax.rs
@@ -135,6 +135,8 @@ impl ConnectorCommon for Stax {
             ),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/stripebilling.rs b/crates/hyperswitch_connectors/src/connectors/stripebilling.rs
index e05fb8b8e33..f3d63ed9ea4 100644
--- a/crates/hyperswitch_connectors/src/connectors/stripebilling.rs
+++ b/crates/hyperswitch_connectors/src/connectors/stripebilling.rs
@@ -141,6 +141,8 @@ impl ConnectorCommon for Stripebilling {
             reason: response.reason,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/taxjar.rs b/crates/hyperswitch_connectors/src/connectors/taxjar.rs
index 30b92d9ceb8..4420384e87f 100644
--- a/crates/hyperswitch_connectors/src/connectors/taxjar.rs
+++ b/crates/hyperswitch_connectors/src/connectors/taxjar.rs
@@ -144,6 +144,8 @@ impl ConnectorCommon for Taxjar {
             reason: Some(response.detail),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/thunes.rs b/crates/hyperswitch_connectors/src/connectors/thunes.rs
index b26c0e67fec..3e2e2fec33c 100644
--- a/crates/hyperswitch_connectors/src/connectors/thunes.rs
+++ b/crates/hyperswitch_connectors/src/connectors/thunes.rs
@@ -144,6 +144,8 @@ impl ConnectorCommon for Thunes {
             reason: response.reason,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/trustpay.rs b/crates/hyperswitch_connectors/src/connectors/trustpay.rs
index b3f2c1f9c3e..fed5c109460 100644
--- a/crates/hyperswitch_connectors/src/connectors/trustpay.rs
+++ b/crates/hyperswitch_connectors/src/connectors/trustpay.rs
@@ -177,6 +177,8 @@ impl ConnectorCommon for Trustpay {
                         .or(response_data.payment_description),
                     attempt_status: None,
                     connector_transaction_id: response_data.instance_id,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 })
             }
             Err(error_msg) => {
@@ -333,6 +335,8 @@ impl ConnectorIntegration<AccessTokenAuth, AccessTokenRequestData, AccessToken>
             reason: response.result_info.additional_info,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/trustpay/transformers.rs b/crates/hyperswitch_connectors/src/connectors/trustpay/transformers.rs
index e8da94fae34..0b94b816196 100644
--- a/crates/hyperswitch_connectors/src/connectors/trustpay/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/trustpay/transformers.rs
@@ -732,6 +732,8 @@ fn handle_cards_response(
             status_code,
             attempt_status: None,
             connector_transaction_id: Some(response.instance_id.clone()),
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     } else {
         None
@@ -797,6 +799,8 @@ fn handle_bank_redirects_error_response(
         status_code,
         attempt_status: None,
         connector_transaction_id: None,
+        issuer_error_code: None,
+        issuer_error_message: None,
     });
     let payment_response_data = PaymentsResponseData::TransactionResponse {
         resource_id: ResponseId::NoResponseId,
@@ -849,6 +853,8 @@ fn handle_bank_redirects_sync_response(
                     .payment_request_id
                     .clone(),
             ),
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     } else {
         None
@@ -903,6 +909,8 @@ pub fn handle_webhook_response(
             status_code,
             attempt_status: None,
             connector_transaction_id: payment_information.references.payment_request_id.clone(),
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     } else {
         None
@@ -1011,6 +1019,8 @@ impl<F, T> TryFrom<ResponseRouterData<F, TrustpayAuthUpdateResponse, T, AccessTo
                     status_code: item.http_code,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..item.data
             }),
@@ -1482,6 +1492,8 @@ fn handle_cards_refund_response(
             status_code,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     } else {
         None
@@ -1515,6 +1527,8 @@ fn handle_webhooks_refund_response(
             status_code,
             attempt_status: None,
             connector_transaction_id: response.references.payment_request_id.clone(),
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     } else {
         None
@@ -1543,6 +1557,8 @@ fn handle_bank_redirects_refund_response(
             status_code,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     } else {
         None
@@ -1579,6 +1595,8 @@ fn handle_bank_redirects_refund_sync_response(
             status_code,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     } else {
         None
@@ -1602,6 +1620,8 @@ fn handle_bank_redirects_refund_sync_error_response(
         status_code,
         attempt_status: None,
         connector_transaction_id: None,
+        issuer_error_code: None,
+        issuer_error_message: None,
     });
     //unreachable case as we are sending error as Some()
     let refund_response_data = RefundsResponseData {
diff --git a/crates/hyperswitch_connectors/src/connectors/tsys/transformers.rs b/crates/hyperswitch_connectors/src/connectors/tsys/transformers.rs
index c2c99c88439..a0e014fd159 100644
--- a/crates/hyperswitch_connectors/src/connectors/tsys/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/tsys/transformers.rs
@@ -238,6 +238,8 @@ fn get_error_response(
         status_code,
         attempt_status: None,
         connector_transaction_id: None,
+        issuer_error_code: None,
+        issuer_error_message: None,
     }
 }
 
diff --git a/crates/hyperswitch_connectors/src/connectors/unified_authentication_service.rs b/crates/hyperswitch_connectors/src/connectors/unified_authentication_service.rs
index ac634d58aea..61e29203979 100644
--- a/crates/hyperswitch_connectors/src/connectors/unified_authentication_service.rs
+++ b/crates/hyperswitch_connectors/src/connectors/unified_authentication_service.rs
@@ -149,6 +149,8 @@ impl ConnectorCommon for UnifiedAuthenticationService {
             reason: Some(response.error),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/volt.rs b/crates/hyperswitch_connectors/src/connectors/volt.rs
index cec1194f281..ae3699bcc20 100644
--- a/crates/hyperswitch_connectors/src/connectors/volt.rs
+++ b/crates/hyperswitch_connectors/src/connectors/volt.rs
@@ -171,6 +171,8 @@ impl ConnectorCommon for Volt {
             reason: Some(reason),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -275,6 +277,8 @@ impl ConnectorIntegration<AccessTokenAuth, AccessTokenRequestData, AccessToken>
             reason: Some(response.message),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/volt/transformers.rs b/crates/hyperswitch_connectors/src/connectors/volt/transformers.rs
index 3841b7e33b4..33d174d5db8 100644
--- a/crates/hyperswitch_connectors/src/connectors/volt/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/volt/transformers.rs
@@ -354,6 +354,8 @@ impl<F, T> TryFrom<ResponseRouterData<F, VoltPaymentsResponseData, T, PaymentsRe
                             status_code: item.http_code,
                             attempt_status: None,
                             connector_transaction_id: Some(payment_response.id),
+                            issuer_error_code: None,
+                            issuer_error_message: None,
                         })
                     } else {
                         Ok(PaymentsResponseData::TransactionResponse {
@@ -395,6 +397,8 @@ impl<F, T> TryFrom<ResponseRouterData<F, VoltPaymentsResponseData, T, PaymentsRe
                             status_code: item.http_code,
                             attempt_status: None,
                             connector_transaction_id: Some(webhook_response.payment.clone()),
+                            issuer_error_code: None,
+                            issuer_error_message: None,
                         })
                     } else {
                         Ok(PaymentsResponseData::TransactionResponse {
diff --git a/crates/hyperswitch_connectors/src/connectors/wellsfargo.rs b/crates/hyperswitch_connectors/src/connectors/wellsfargo.rs
index 8566ec70341..e58b9d4439a 100644
--- a/crates/hyperswitch_connectors/src/connectors/wellsfargo.rs
+++ b/crates/hyperswitch_connectors/src/connectors/wellsfargo.rs
@@ -222,6 +222,8 @@ impl ConnectorCommon for Wellsfargo {
                     reason,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 })
             }
             Ok(transformers::WellsfargoErrorResponse::AuthenticationError(response)) => {
@@ -234,6 +236,8 @@ impl ConnectorCommon for Wellsfargo {
                     reason: Some(response.response.rmsg),
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 })
             }
             Ok(transformers::WellsfargoErrorResponse::NotAvailableError(response)) => {
@@ -258,6 +262,8 @@ impl ConnectorCommon for Wellsfargo {
                     reason: Some(error_response),
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 })
             }
             Err(error_msg) => {
@@ -482,6 +488,8 @@ impl ConnectorIntegration<SetupMandate, SetupMandateRequestData, PaymentsRespons
                 .unwrap_or(hyperswitch_interfaces::consts::NO_ERROR_MESSAGE.to_string()),
             attempt_status,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -562,6 +570,8 @@ impl ConnectorIntegration<MandateRevoke, MandateRevokeRequestData, MandateRevoke
                     status_code: res.status_code,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..data.clone()
             })
@@ -696,6 +706,8 @@ impl ConnectorIntegration<Capture, PaymentsCaptureData, PaymentsResponseData> fo
                 .unwrap_or(hyperswitch_interfaces::consts::NO_ERROR_MESSAGE.to_string()),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -890,6 +902,8 @@ impl ConnectorIntegration<Authorize, PaymentsAuthorizeData, PaymentsResponseData
                 .unwrap_or(hyperswitch_interfaces::consts::NO_ERROR_MESSAGE.to_string()),
             attempt_status,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -1011,6 +1025,8 @@ impl ConnectorIntegration<Void, PaymentsCancelData, PaymentsResponseData> for We
                 .unwrap_or(hyperswitch_interfaces::consts::NO_ERROR_MESSAGE.to_string()),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/wellsfargo/transformers.rs b/crates/hyperswitch_connectors/src/connectors/wellsfargo/transformers.rs
index 10c381fa857..b346d396866 100644
--- a/crates/hyperswitch_connectors/src/connectors/wellsfargo/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/wellsfargo/transformers.rs
@@ -1708,10 +1708,10 @@ fn get_error_response_if_failure(
 
 fn get_payment_response(
     (info_response, status, http_code): (&WellsfargoPaymentsResponse, enums::AttemptStatus, u16),
-) -> Result<PaymentsResponseData, ErrorResponse> {
+) -> Result<PaymentsResponseData, Box<ErrorResponse>> {
     let error_response = get_error_response_if_failure((info_response, status, http_code));
     match error_response {
-        Some(error) => Err(error),
+        Some(error) => Err(Box::new(error)),
         None => {
             let incremental_authorization_allowed =
                 Some(status == enums::AttemptStatus::Authorized);
@@ -1776,7 +1776,8 @@ impl
                 .unwrap_or(WellsfargoPaymentStatus::StatusNotReceived),
             item.data.request.is_auto_capture()?,
         );
-        let response = get_payment_response((&item.response, status, item.http_code));
+        let response =
+            get_payment_response((&item.response, status, item.http_code)).map_err(|err| *err);
         let connector_response = item
             .response
             .processor_information
@@ -1832,7 +1833,8 @@ impl<F>
                 .unwrap_or(WellsfargoPaymentStatus::StatusNotReceived),
             true,
         );
-        let response = get_payment_response((&item.response, status, item.http_code));
+        let response =
+            get_payment_response((&item.response, status, item.http_code)).map_err(|err| *err);
         Ok(Self {
             status,
             response,
@@ -1862,7 +1864,8 @@ impl<F>
                 .unwrap_or(WellsfargoPaymentStatus::StatusNotReceived),
             false,
         );
-        let response = get_payment_response((&item.response, status, item.http_code));
+        let response =
+            get_payment_response((&item.response, status, item.http_code)).map_err(|err| *err);
         Ok(Self {
             status,
             response,
@@ -2376,6 +2379,8 @@ pub fn get_error_response(
         status_code,
         attempt_status,
         connector_transaction_id: Some(transaction_id.clone()),
+        issuer_error_code: None,
+        issuer_error_message: None,
     }
 }
 pub fn get_error_reason(
diff --git a/crates/hyperswitch_connectors/src/connectors/worldpay.rs b/crates/hyperswitch_connectors/src/connectors/worldpay.rs
index 41b2207b175..b261343c5b1 100644
--- a/crates/hyperswitch_connectors/src/connectors/worldpay.rs
+++ b/crates/hyperswitch_connectors/src/connectors/worldpay.rs
@@ -156,6 +156,8 @@ impl ConnectorCommon for Worldpay {
             reason: response.validation_errors.map(|e| e.to_string()),
             attempt_status: Some(enums::AttemptStatus::Failure),
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -483,6 +485,8 @@ impl ConnectorIntegration<PSync, PaymentsSyncData, PaymentsResponseData> for Wor
             reason: response.validation_errors.map(|e| e.to_string()),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 
diff --git a/crates/hyperswitch_connectors/src/connectors/worldpay/transformers.rs b/crates/hyperswitch_connectors/src/connectors/worldpay/transformers.rs
index 65c884601de..61621b3cc93 100644
--- a/crates/hyperswitch_connectors/src/connectors/worldpay/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/worldpay/transformers.rs
@@ -786,6 +786,8 @@ impl<F, T>
                 status_code: router_data.http_code,
                 attempt_status: Some(status),
                 connector_transaction_id: optional_correlation_id,
+                issuer_error_code: None,
+                issuer_error_message: None,
             }),
             (_, Some((code, message))) => Err(ErrorResponse {
                 code,
@@ -794,6 +796,8 @@ impl<F, T>
                 status_code: router_data.http_code,
                 attempt_status: Some(status),
                 connector_transaction_id: optional_correlation_id,
+                issuer_error_code: None,
+                issuer_error_message: None,
             }),
         };
         Ok(Self {
diff --git a/crates/hyperswitch_connectors/src/connectors/xendit.rs b/crates/hyperswitch_connectors/src/connectors/xendit.rs
index f1872e31ae7..cd65b25fda4 100644
--- a/crates/hyperswitch_connectors/src/connectors/xendit.rs
+++ b/crates/hyperswitch_connectors/src/connectors/xendit.rs
@@ -154,6 +154,8 @@ impl ConnectorCommon for Xendit {
             status_code: res.status_code,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/xendit/transformers.rs b/crates/hyperswitch_connectors/src/connectors/xendit/transformers.rs
index 47936d43065..30b023e6dc4 100644
--- a/crates/hyperswitch_connectors/src/connectors/xendit/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/xendit/transformers.rs
@@ -330,6 +330,8 @@ impl<F>
                 attempt_status: None,
                 connector_transaction_id: Some(item.response.id.clone()),
                 status_code: item.http_code,
+                issuer_error_code: None,
+                issuer_error_message: None,
             })
         } else {
             let charges = match item.data.request.split_payments.as_ref() {
@@ -439,6 +441,8 @@ impl<F>
                 attempt_status: None,
                 connector_transaction_id: None,
                 status_code: item.http_code,
+                issuer_error_code: None,
+                issuer_error_message: None,
             })
         } else {
             Ok(PaymentsResponseData::TransactionResponse {
@@ -572,6 +576,8 @@ impl TryFrom<PaymentsSyncResponseRouterData<XenditResponse>> for PaymentsSyncRou
                         attempt_status: None,
                         connector_transaction_id: Some(payment_response.id.clone()),
                         status_code: item.http_code,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     })
                 } else {
                     Ok(PaymentsResponseData::TransactionResponse {
diff --git a/crates/hyperswitch_connectors/src/connectors/zen.rs b/crates/hyperswitch_connectors/src/connectors/zen.rs
index 70703b31643..71ca8c7758d 100644
--- a/crates/hyperswitch_connectors/src/connectors/zen.rs
+++ b/crates/hyperswitch_connectors/src/connectors/zen.rs
@@ -146,6 +146,8 @@ impl ConnectorCommon for Zen {
             reason: None,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/zen/transformers.rs b/crates/hyperswitch_connectors/src/connectors/zen/transformers.rs
index 305c8518c8e..bec1f6be0a4 100644
--- a/crates/hyperswitch_connectors/src/connectors/zen/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/zen/transformers.rs
@@ -939,6 +939,8 @@ fn get_zen_response(
             status_code,
             attempt_status: Some(status),
             connector_transaction_id: Some(response.id.clone()),
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     } else {
         None
@@ -1085,6 +1087,8 @@ fn get_zen_refund_response(
             status_code,
             attempt_status: None,
             connector_transaction_id: Some(response.id.clone()),
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     } else {
         None
diff --git a/crates/hyperswitch_connectors/src/connectors/zsl.rs b/crates/hyperswitch_connectors/src/connectors/zsl.rs
index d7c0152b7a6..7ed2a660822 100644
--- a/crates/hyperswitch_connectors/src/connectors/zsl.rs
+++ b/crates/hyperswitch_connectors/src/connectors/zsl.rs
@@ -123,6 +123,8 @@ impl ConnectorCommon for Zsl {
             reason: Some(error_reason),
             attempt_status: Some(common_enums::AttemptStatus::Failure),
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_connectors/src/connectors/zsl/transformers.rs b/crates/hyperswitch_connectors/src/connectors/zsl/transformers.rs
index 8a39901e5de..66bd3eda1d1 100644
--- a/crates/hyperswitch_connectors/src/connectors/zsl/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/zsl/transformers.rs
@@ -349,6 +349,8 @@ impl<F, T> TryFrom<ResponseRouterData<F, ZslPaymentsResponse, T, PaymentsRespons
                         status_code: item.http_code,
                         attempt_status: Some(enums::AttemptStatus::Failure),
                         connector_transaction_id: Some(item.response.mer_ref.clone()),
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     }),
                     ..item.data
                 })
@@ -365,6 +367,8 @@ impl<F, T> TryFrom<ResponseRouterData<F, ZslPaymentsResponse, T, PaymentsRespons
                     status_code: item.http_code,
                     attempt_status: Some(enums::AttemptStatus::Failure),
                     connector_transaction_id: Some(item.response.mer_ref.clone()),
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..item.data
             })
@@ -443,6 +447,8 @@ impl<F> TryFrom<ResponseRouterData<F, ZslWebhookResponse, PaymentsSyncData, Paym
                     status_code: item.http_code,
                     attempt_status: Some(enums::AttemptStatus::Failure),
                     connector_transaction_id: Some(item.response.mer_ref.clone()),
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 ..item.data
             })
diff --git a/crates/hyperswitch_connectors/src/utils.rs b/crates/hyperswitch_connectors/src/utils.rs
index b082962e400..97c27539c67 100644
--- a/crates/hyperswitch_connectors/src/utils.rs
+++ b/crates/hyperswitch_connectors/src/utils.rs
@@ -336,6 +336,8 @@ pub(crate) fn handle_json_response_deserialization_failure(
                 reason: Some(response_data),
                 attempt_status: None,
                 connector_transaction_id: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             })
         }
     }
diff --git a/crates/hyperswitch_domain_models/src/errors/api_error_response.rs b/crates/hyperswitch_domain_models/src/errors/api_error_response.rs
index fd8e144f4f2..733c6a73c93 100644
--- a/crates/hyperswitch_domain_models/src/errors/api_error_response.rs
+++ b/crates/hyperswitch_domain_models/src/errors/api_error_response.rs
@@ -702,6 +702,8 @@ impl From<ApiErrorResponse> for router_data::ErrorResponse {
             },
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         }
     }
 }
diff --git a/crates/hyperswitch_domain_models/src/payments/payment_attempt.rs b/crates/hyperswitch_domain_models/src/payments/payment_attempt.rs
index 70926056957..2dc4eec15f1 100644
--- a/crates/hyperswitch_domain_models/src/payments/payment_attempt.rs
+++ b/crates/hyperswitch_domain_models/src/payments/payment_attempt.rs
@@ -846,6 +846,8 @@ pub struct PaymentAttempt {
     pub capture_before: Option<PrimitiveDateTime>,
     pub card_discovery: Option<common_enums::CardDiscovery>,
     pub charges: Option<common_types::payments::ConnectorChargeResponseData>,
+    pub issuer_error_code: Option<String>,
+    pub issuer_error_message: Option<String>,
 }
 
 #[cfg(feature = "v1")]
@@ -1239,6 +1241,8 @@ pub enum PaymentAttemptUpdate {
         connector_transaction_id: Option<String>,
         payment_method_data: Option<serde_json::Value>,
         authentication_type: Option<storage_enums::AuthenticationType>,
+        issuer_error_code: Option<String>,
+        issuer_error_message: Option<String>,
     },
     CaptureUpdate {
         amount_to_capture: Option<MinorUnit>,
@@ -1542,6 +1546,8 @@ impl PaymentAttemptUpdate {
                 connector_transaction_id,
                 payment_method_data,
                 authentication_type,
+                issuer_error_code,
+                issuer_error_message,
             } => DieselPaymentAttemptUpdate::ErrorUpdate {
                 connector,
                 status,
@@ -1555,6 +1561,8 @@ impl PaymentAttemptUpdate {
                 connector_transaction_id,
                 payment_method_data,
                 authentication_type,
+                issuer_error_code,
+                issuer_error_message,
             },
             Self::CaptureUpdate {
                 multiple_capture_count,
@@ -1824,6 +1832,8 @@ impl behaviour::Conversion for PaymentAttempt {
             processor_transaction_data,
             card_discovery: self.card_discovery,
             charges: self.charges,
+            issuer_error_code: self.issuer_error_code,
+            issuer_error_message: self.issuer_error_message,
             // Below fields are deprecated. Please add any new fields above this line.
             connector_transaction_data: None,
         })
@@ -1912,6 +1922,8 @@ impl behaviour::Conversion for PaymentAttempt {
                 capture_before: storage_model.capture_before,
                 card_discovery: storage_model.card_discovery,
                 charges: storage_model.charges,
+                issuer_error_code: storage_model.issuer_error_code,
+                issuer_error_message: storage_model.issuer_error_message,
             })
         }
         .await
diff --git a/crates/hyperswitch_domain_models/src/router_data.rs b/crates/hyperswitch_domain_models/src/router_data.rs
index 7f1278414ea..6618d2fbc80 100644
--- a/crates/hyperswitch_domain_models/src/router_data.rs
+++ b/crates/hyperswitch_domain_models/src/router_data.rs
@@ -399,6 +399,8 @@ pub struct ErrorResponse {
     pub status_code: u16,
     pub attempt_status: Option<common_enums::enums::AttemptStatus>,
     pub connector_transaction_id: Option<String>,
+    pub issuer_error_code: Option<String>,
+    pub issuer_error_message: Option<String>,
 }
 
 impl Default for ErrorResponse {
@@ -410,6 +412,8 @@ impl Default for ErrorResponse {
             status_code: http::StatusCode::INTERNAL_SERVER_ERROR.as_u16(),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         }
     }
 }
@@ -423,6 +427,8 @@ impl ErrorResponse {
             status_code: http::StatusCode::INTERNAL_SERVER_ERROR.as_u16(),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         }
     }
 }
@@ -601,6 +607,8 @@ impl
                     status_code: _,
                     attempt_status,
                     connector_transaction_id,
+                    issuer_error_code: _,
+                    issuer_error_message: _,
                 } = error_response.clone();
                 let attempt_status = attempt_status.unwrap_or(self.status);
 
@@ -798,6 +806,8 @@ impl
                     status_code: _,
                     attempt_status,
                     connector_transaction_id,
+                    issuer_error_code: _,
+                    issuer_error_message: _,
                 } = error_response.clone();
                 let attempt_status = attempt_status.unwrap_or(self.status);
 
@@ -1013,6 +1023,8 @@ impl
                     status_code: _,
                     attempt_status,
                     connector_transaction_id,
+                    issuer_error_code: _,
+                    issuer_error_message: _,
                 } = error_response.clone();
 
                 let attempt_status = attempt_status.unwrap_or(common_enums::AttemptStatus::Failure);
@@ -1256,6 +1268,8 @@ impl
                     status_code: _,
                     attempt_status,
                     connector_transaction_id,
+                    issuer_error_code: _,
+                    issuer_error_message: _,
                 } = error_response.clone();
                 let attempt_status = attempt_status.unwrap_or(self.status);
 
diff --git a/crates/hyperswitch_interfaces/src/api.rs b/crates/hyperswitch_interfaces/src/api.rs
index b70d326feb6..78fdba32c9b 100644
--- a/crates/hyperswitch_interfaces/src/api.rs
+++ b/crates/hyperswitch_interfaces/src/api.rs
@@ -198,6 +198,8 @@ pub trait ConnectorIntegration<T, Req, Resp>:
             status_code: res.status_code,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 
@@ -286,6 +288,8 @@ pub trait ConnectorCommon {
             reason: None,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/hyperswitch_interfaces/src/connector_integration_v2.rs b/crates/hyperswitch_interfaces/src/connector_integration_v2.rs
index bc18f5c6639..e0974f5d04d 100644
--- a/crates/hyperswitch_interfaces/src/connector_integration_v2.rs
+++ b/crates/hyperswitch_interfaces/src/connector_integration_v2.rs
@@ -158,6 +158,8 @@ pub trait ConnectorIntegrationV2<Flow, ResourceCommonData, Req, Resp>:
             status_code: res.status_code,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 
diff --git a/crates/router/src/connector/adyenplatform.rs b/crates/router/src/connector/adyenplatform.rs
index f95e9cd4d64..5ff89721cb4 100644
--- a/crates/router/src/connector/adyenplatform.rs
+++ b/crates/router/src/connector/adyenplatform.rs
@@ -99,6 +99,8 @@ impl ConnectorCommon for Adyenplatform {
             reason: response.detail,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/router/src/connector/dummyconnector.rs b/crates/router/src/connector/dummyconnector.rs
index 226067cef96..f2058c17f6c 100644
--- a/crates/router/src/connector/dummyconnector.rs
+++ b/crates/router/src/connector/dummyconnector.rs
@@ -125,6 +125,8 @@ impl<const T: u8> ConnectorCommon for DummyConnector<T> {
             reason: response.error.reason,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/router/src/connector/ebanx.rs b/crates/router/src/connector/ebanx.rs
index 01db54c1f67..b38297ed5c7 100644
--- a/crates/router/src/connector/ebanx.rs
+++ b/crates/router/src/connector/ebanx.rs
@@ -124,6 +124,8 @@ impl ConnectorCommon for Ebanx {
             reason: response.message,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/router/src/connector/gpayments.rs b/crates/router/src/connector/gpayments.rs
index 1febbfa7885..2d3b1c37d58 100644
--- a/crates/router/src/connector/gpayments.rs
+++ b/crates/router/src/connector/gpayments.rs
@@ -123,6 +123,8 @@ impl ConnectorCommon for Gpayments {
             reason: response.error_detail,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/router/src/connector/netcetera.rs b/crates/router/src/connector/netcetera.rs
index 459ac93e068..f1fc94bd482 100644
--- a/crates/router/src/connector/netcetera.rs
+++ b/crates/router/src/connector/netcetera.rs
@@ -111,6 +111,8 @@ impl ConnectorCommon for Netcetera {
             reason: response.error_details.error_detail,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/router/src/connector/netcetera/transformers.rs b/crates/router/src/connector/netcetera/transformers.rs
index 886dbc18ad4..1169f29563e 100644
--- a/crates/router/src/connector/netcetera/transformers.rs
+++ b/crates/router/src/connector/netcetera/transformers.rs
@@ -110,6 +110,8 @@ impl
                     status_code: item.http_code,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 })
             }
         };
@@ -179,6 +181,8 @@ impl
                 status_code: item.http_code,
                 attempt_status: None,
                 connector_transaction_id: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             }),
         };
         Ok(Self {
diff --git a/crates/router/src/connector/nmi.rs b/crates/router/src/connector/nmi.rs
index 73aaec55e57..d0cc0f156d7 100644
--- a/crates/router/src/connector/nmi.rs
+++ b/crates/router/src/connector/nmi.rs
@@ -103,6 +103,8 @@ impl ConnectorCommon for Nmi {
             code: response.response_code,
             attempt_status: None,
             connector_transaction_id: Some(response.transactionid),
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/router/src/connector/nmi/transformers.rs b/crates/router/src/connector/nmi/transformers.rs
index d6f1cb1962f..da2649cc444 100644
--- a/crates/router/src/connector/nmi/transformers.rs
+++ b/crates/router/src/connector/nmi/transformers.rs
@@ -224,6 +224,8 @@ impl
                     status_code: item.http_code,
                     attempt_status: None,
                     connector_transaction_id: Some(item.response.transactionid),
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }),
                 enums::AttemptStatus::Failure,
             ),
@@ -401,6 +403,8 @@ impl ForeignFrom<(NmiCompleteResponse, u16)> for types::ErrorResponse {
             status_code: http_code,
             attempt_status: None,
             connector_transaction_id: Some(response.transactionid),
+            issuer_error_code: None,
+            issuer_error_message: None,
         }
     }
 }
@@ -905,6 +909,8 @@ impl ForeignFrom<(StandardResponse, u16)> for types::ErrorResponse {
             status_code: http_code,
             attempt_status: None,
             connector_transaction_id: Some(response.transactionid),
+            issuer_error_code: None,
+            issuer_error_message: None,
         }
     }
 }
diff --git a/crates/router/src/connector/payone.rs b/crates/router/src/connector/payone.rs
index 58b179e5799..2e7656f08cf 100644
--- a/crates/router/src/connector/payone.rs
+++ b/crates/router/src/connector/payone.rs
@@ -210,6 +210,8 @@ impl ConnectorCommon for Payone {
                 ),
                 attempt_status: None,
                 connector_transaction_id: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             }),
             None => Ok(ErrorResponse {
                 status_code: res.status_code,
@@ -218,6 +220,8 @@ impl ConnectorCommon for Payone {
                 reason: None,
                 attempt_status: None,
                 connector_transaction_id: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             }),
         }
     }
diff --git a/crates/router/src/connector/plaid.rs b/crates/router/src/connector/plaid.rs
index f24d7bd8d6d..b5428fba4d3 100644
--- a/crates/router/src/connector/plaid.rs
+++ b/crates/router/src/connector/plaid.rs
@@ -133,6 +133,8 @@ impl ConnectorCommon for Plaid {
             reason: response.display_message,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/router/src/connector/plaid/transformers.rs b/crates/router/src/connector/plaid/transformers.rs
index 4e4fb1863ee..ebab8c185af 100644
--- a/crates/router/src/connector/plaid/transformers.rs
+++ b/crates/router/src/connector/plaid/transformers.rs
@@ -302,6 +302,8 @@ impl<F, T>
                     status_code: item.http_code,
                     attempt_status: None,
                     connector_transaction_id: Some(item.response.payment_id),
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 })
             } else {
                 Ok(types::PaymentsResponseData::TransactionResponse {
@@ -388,6 +390,8 @@ impl<F, T> TryFrom<types::ResponseRouterData<F, PlaidSyncResponse, T, types::Pay
                     status_code: item.http_code,
                     attempt_status: None,
                     connector_transaction_id: Some(item.response.payment_id),
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 })
             } else {
                 Ok(types::PaymentsResponseData::TransactionResponse {
diff --git a/crates/router/src/connector/riskified.rs b/crates/router/src/connector/riskified.rs
index 1268e041603..a9585e5d3fd 100644
--- a/crates/router/src/connector/riskified.rs
+++ b/crates/router/src/connector/riskified.rs
@@ -147,6 +147,8 @@ impl ConnectorCommon for Riskified {
             message: response.error.message.clone(),
             reason: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/router/src/connector/signifyd.rs b/crates/router/src/connector/signifyd.rs
index 21452819c39..857dce8c2e3 100644
--- a/crates/router/src/connector/signifyd.rs
+++ b/crates/router/src/connector/signifyd.rs
@@ -108,6 +108,8 @@ impl ConnectorCommon for Signifyd {
             reason: Some(response.errors.to_string()),
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/router/src/connector/stripe.rs b/crates/router/src/connector/stripe.rs
index a971bd96741..3971ecc7db8 100644
--- a/crates/router/src/connector/stripe.rs
+++ b/crates/router/src/connector/stripe.rs
@@ -129,6 +129,8 @@ impl ConnectorCommon for Stripe {
             reason: response.error.message,
             attempt_status: None,
             connector_transaction_id: response.error.payment_intent.map(|pi| pi.id),
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -331,6 +333,8 @@ impl
             }),
             attempt_status: None,
             connector_transaction_id: response.error.payment_intent.map(|pi| pi.id),
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -463,6 +467,8 @@ impl
             }),
             attempt_status: None,
             connector_transaction_id: response.error.payment_intent.map(|pi| pi.id),
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -591,6 +597,8 @@ impl
             }),
             attempt_status: None,
             connector_transaction_id: response.error.payment_intent.map(|pi| pi.id),
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -744,6 +752,8 @@ impl
             }),
             attempt_status: None,
             connector_transaction_id: response.error.payment_intent.map(|pi| pi.id),
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -914,6 +924,8 @@ impl
             }),
             attempt_status: None,
             connector_transaction_id: response.error.payment_intent.map(|pi| pi.id),
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -1164,6 +1176,8 @@ impl
             }),
             attempt_status: None,
             connector_transaction_id: response.error.payment_intent.map(|pi| pi.id),
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -1291,6 +1305,8 @@ impl
             }),
             attempt_status: None,
             connector_transaction_id: response.error.payment_intent.map(|pi| pi.id),
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -1451,6 +1467,8 @@ impl
             }),
             attempt_status: None,
             connector_transaction_id: response.error.payment_intent.map(|pi| pi.id),
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -1620,6 +1638,8 @@ impl services::ConnectorIntegration<api::Execute, types::RefundsData, types::Ref
             }),
             attempt_status: None,
             connector_transaction_id: response.error.payment_intent.map(|pi| pi.id),
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -1754,6 +1774,8 @@ impl services::ConnectorIntegration<api::RSync, types::RefundsData, types::Refun
             }),
             attempt_status: None,
             connector_transaction_id: response.error.payment_intent.map(|pi| pi.id),
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -1908,6 +1930,8 @@ impl
             }),
             attempt_status: None,
             connector_transaction_id: response.error.payment_intent.map(|pi| pi.id),
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -2021,6 +2045,8 @@ impl
             }),
             attempt_status: None,
             connector_transaction_id: response.error.payment_intent.map(|pi| pi.id),
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
@@ -2152,6 +2178,8 @@ impl
             }),
             attempt_status: None,
             connector_transaction_id: response.error.payment_intent.map(|pi| pi.id),
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/router/src/connector/stripe/transformers.rs b/crates/router/src/connector/stripe/transformers.rs
index 41fb23e7e9e..39d43bd2e06 100644
--- a/crates/router/src/connector/stripe/transformers.rs
+++ b/crates/router/src/connector/stripe/transformers.rs
@@ -3158,6 +3158,8 @@ impl TryFrom<types::RefundsResponseRouterData<api::Execute, RefundResponse>>
                 status_code: item.http_code,
                 attempt_status: None,
                 connector_transaction_id: Some(item.response.id),
+                issuer_error_code: None,
+                issuer_error_message: None,
             })
         } else {
             Ok(types::RefundsResponseData {
@@ -3193,6 +3195,8 @@ impl TryFrom<types::RefundsResponseRouterData<api::RSync, RefundResponse>>
                 status_code: item.http_code,
                 attempt_status: None,
                 connector_transaction_id: Some(item.response.id),
+                issuer_error_code: None,
+                issuer_error_message: None,
             })
         } else {
             Ok(types::RefundsResponseData {
@@ -3549,6 +3553,8 @@ impl<F, T> TryFrom<types::ResponseRouterData<F, ChargesResponse, T, types::Payme
                 status_code: item.http_code,
                 attempt_status: Some(status),
                 connector_transaction_id: Some(item.response.id),
+                issuer_error_code: None,
+                issuer_error_message: None,
             })
         } else {
             Ok(types::PaymentsResponseData::TransactionResponse {
@@ -4169,6 +4175,8 @@ impl ForeignTryFrom<(&Option<ErrorDetails>, u16, String)> for types::PaymentsRes
             status_code: http_code,
             attempt_status: None,
             connector_transaction_id: Some(response_id),
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/router/src/connector/threedsecureio.rs b/crates/router/src/connector/threedsecureio.rs
index aec8f780451..09d232c7471 100644
--- a/crates/router/src/connector/threedsecureio.rs
+++ b/crates/router/src/connector/threedsecureio.rs
@@ -122,6 +122,8 @@ impl ConnectorCommon for Threedsecureio {
                     reason: response.error_description,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 })
             }
             Err(err) => {
diff --git a/crates/router/src/connector/threedsecureio/transformers.rs b/crates/router/src/connector/threedsecureio/transformers.rs
index dc1a90f36e7..faf72a2951b 100644
--- a/crates/router/src/connector/threedsecureio/transformers.rs
+++ b/crates/router/src/connector/threedsecureio/transformers.rs
@@ -124,6 +124,8 @@ impl
                     status_code: item.http_code,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 })
             }
         };
@@ -205,6 +207,8 @@ impl
                         status_code: item.http_code,
                         attempt_status: None,
                         connector_transaction_id: None,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     })
                 }
                 ThreedsecureioErrorResponseWrapper::ErrorString(error) => {
@@ -215,6 +219,8 @@ impl
                         status_code: item.http_code,
                         attempt_status: None,
                         connector_transaction_id: None,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     })
                 }
             },
diff --git a/crates/router/src/connector/utils.rs b/crates/router/src/connector/utils.rs
index 8a186e0291a..5009eaf4daa 100644
--- a/crates/router/src/connector/utils.rs
+++ b/crates/router/src/connector/utils.rs
@@ -2621,6 +2621,8 @@ impl
             status_code: http_code,
             attempt_status,
             connector_transaction_id,
+            issuer_error_code: None,
+            issuer_error_message: None,
         }
     }
 }
diff --git a/crates/router/src/connector/wellsfargopayout.rs b/crates/router/src/connector/wellsfargopayout.rs
index 33111ee7be0..5caf3c689b2 100644
--- a/crates/router/src/connector/wellsfargopayout.rs
+++ b/crates/router/src/connector/wellsfargopayout.rs
@@ -132,6 +132,8 @@ impl ConnectorCommon for Wellsfargopayout {
             reason: response.reason,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/router/src/connector/wise.rs b/crates/router/src/connector/wise.rs
index e4493f5016f..a1d75f18b2a 100644
--- a/crates/router/src/connector/wise.rs
+++ b/crates/router/src/connector/wise.rs
@@ -113,6 +113,8 @@ impl ConnectorCommon for Wise {
                         reason: None,
                         attempt_status: None,
                         connector_transaction_id: None,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     })
                 } else {
                     Ok(types::ErrorResponse {
@@ -122,6 +124,8 @@ impl ConnectorCommon for Wise {
                         reason: None,
                         attempt_status: None,
                         connector_transaction_id: None,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     })
                 }
             }
@@ -132,6 +136,8 @@ impl ConnectorCommon for Wise {
                 reason: None,
                 attempt_status: None,
                 connector_transaction_id: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             }),
         }
     }
@@ -338,6 +344,8 @@ impl services::ConnectorIntegration<api::PoCancel, types::PayoutsData, types::Pa
             reason: None,
             attempt_status: None,
             connector_transaction_id: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         })
     }
 }
diff --git a/crates/router/src/core/payments/access_token.rs b/crates/router/src/core/payments/access_token.rs
index 7d56c2ccb91..22f1b593f13 100644
--- a/crates/router/src/core/payments/access_token.rs
+++ b/crates/router/src/core/payments/access_token.rs
@@ -233,6 +233,8 @@ pub async fn refresh_connector_auth(
                     status_code: 504,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 };
 
                 Ok(Err(error_response))
diff --git a/crates/router/src/core/payments/operations/payment_response.rs b/crates/router/src/core/payments/operations/payment_response.rs
index bcf0d624ff9..409fccf5e63 100644
--- a/crates/router/src/core/payments/operations/payment_response.rs
+++ b/crates/router/src/core/payments/operations/payment_response.rs
@@ -1436,6 +1436,8 @@ async fn payment_response_update_tracker<F: Clone, T: types::Capturable>(
                             connector_transaction_id: err.connector_transaction_id,
                             payment_method_data: additional_payment_method_data,
                             authentication_type: auth_update,
+                            issuer_error_code: err.issuer_error_code,
+                            issuer_error_message: err.issuer_error_message,
                         }),
                     )
                 }
@@ -1473,6 +1475,8 @@ async fn payment_response_update_tracker<F: Clone, T: types::Capturable>(
                             connector_transaction_id,
                             payment_method_data: None,
                             authentication_type: auth_update,
+                            issuer_error_code: None,
+                            issuer_error_message: None,
                         }),
                     )
                 }
diff --git a/crates/router/src/core/payments/retry.rs b/crates/router/src/core/payments/retry.rs
index 5fdf14dbf5a..24a3ac2ec86 100644
--- a/crates/router/src/core/payments/retry.rs
+++ b/crates/router/src/core/payments/retry.rs
@@ -537,6 +537,8 @@ where
                 connector_transaction_id: error_response.connector_transaction_id.clone(),
                 payment_method_data: additional_payment_method_data,
                 authentication_type: auth_update,
+                issuer_error_code: error_response.issuer_error_code.clone(),
+                issuer_error_message: error_response.issuer_error_message.clone(),
             };
 
             #[cfg(feature = "v1")]
diff --git a/crates/router/src/core/payments/transformers.rs b/crates/router/src/core/payments/transformers.rs
index a34c137dbda..7f5f7858a3a 100644
--- a/crates/router/src/core/payments/transformers.rs
+++ b/crates/router/src/core/payments/transformers.rs
@@ -2569,6 +2569,8 @@ where
             capture_before: payment_attempt.capture_before,
             extended_authorization_applied: payment_attempt.extended_authorization_applied,
             card_discovery: payment_attempt.card_discovery,
+            issuer_error_code: payment_attempt.issuer_error_code,
+            issuer_error_message: payment_attempt.issuer_error_message,
         };
 
         services::ApplicationResponse::JsonWithHeaders((payments_response, headers))
@@ -2827,7 +2829,9 @@ impl ForeignFrom<(storage::PaymentIntent, storage::PaymentAttempt)> for api::Pay
             order_tax_amount: None,
             connector_mandate_id:None,
             shipping_cost: None,
-            card_discovery: pa.card_discovery
+            card_discovery: pa.card_discovery,
+            issuer_error_code: pa.issuer_error_code,
+            issuer_error_message: pa.issuer_error_message,
         }
     }
 }
diff --git a/crates/router/src/core/payouts/access_token.rs b/crates/router/src/core/payouts/access_token.rs
index e5e9b47e4ff..52c31e8fa94 100644
--- a/crates/router/src/core/payouts/access_token.rs
+++ b/crates/router/src/core/payouts/access_token.rs
@@ -172,6 +172,8 @@ pub async fn refresh_connector_auth(
                     status_code: 504,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 };
 
                 Ok(Err(error_response))
diff --git a/crates/router/src/core/refunds.rs b/crates/router/src/core/refunds.rs
index b850420dfd7..7d663a48a1a 100644
--- a/crates/router/src/core/refunds.rs
+++ b/crates/router/src/core/refunds.rs
@@ -238,6 +238,8 @@ pub async fn trigger_refund_to_gateway(
                             processor_refund_data: None,
                             unified_code: None,
                             unified_message: None,
+                            issuer_error_code: None,
+                            issuer_error_message: None,
                         })
                     }
                     errors::ConnectorError::NotSupported { message, connector } => {
@@ -252,6 +254,8 @@ pub async fn trigger_refund_to_gateway(
                             processor_refund_data: None,
                             unified_code: None,
                             unified_message: None,
+                            issuer_error_code: None,
+                            issuer_error_message: None,
                         })
                     }
                     _ => None,
@@ -335,6 +339,8 @@ pub async fn trigger_refund_to_gateway(
                 processor_refund_data: None,
                 unified_code: Some(unified_code),
                 unified_message: Some(unified_message),
+                issuer_error_code: err.issuer_error_code,
+                issuer_error_message: err.issuer_error_message,
             }
         }
         Ok(response) => {
@@ -366,6 +372,8 @@ pub async fn trigger_refund_to_gateway(
                         processor_refund_data,
                         unified_code: None,
                         unified_message: None,
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                     }
                 }
                 Ok(()) => {
@@ -680,6 +688,8 @@ pub async fn sync_refund_with_gateway(
                 processor_refund_data: None,
                 unified_code: None,
                 unified_message: None,
+                issuer_error_code: error_message.issuer_error_code,
+                issuer_error_message: error_message.issuer_error_message,
             }
         }
         Ok(response) => match router_data_res.integrity_check.clone() {
@@ -710,6 +720,8 @@ pub async fn sync_refund_with_gateway(
                     processor_refund_data,
                     unified_code: None,
                     unified_message: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 }
             }
             Ok(()) => {
@@ -1265,6 +1277,8 @@ impl ForeignFrom<storage::Refund> for api::RefundResponse {
             split_refunds: refund.split_refunds,
             unified_code: refund.unified_code,
             unified_message: refund.unified_message,
+            issuer_error_code: refund.issuer_error_code,
+            issuer_error_message: refund.issuer_error_message,
         }
     }
 }
diff --git a/crates/router/src/db/refund.rs b/crates/router/src/db/refund.rs
index 07bdfa3f77d..1f54eeb5fdc 100644
--- a/crates/router/src/db/refund.rs
+++ b/crates/router/src/db/refund.rs
@@ -439,6 +439,8 @@ mod storage {
                         unified_message: None,
                         processor_refund_data: new.processor_refund_data.clone(),
                         processor_transaction_data: new.processor_transaction_data.clone(),
+                        issuer_error_code: None,
+                        issuer_error_message: None,
                         // Below fields are deprecated. Please add any new fields above this line.
                         connector_refund_data: None,
                         connector_transaction_data: None,
@@ -939,6 +941,8 @@ impl RefundInterface for MockDb {
             unified_message: None,
             processor_refund_data: new.processor_refund_data.clone(),
             processor_transaction_data: new.processor_transaction_data.clone(),
+            issuer_error_code: None,
+            issuer_error_message: None,
             // Below fields are deprecated. Please add any new fields above this line.
             connector_refund_data: None,
             connector_transaction_data: None,
diff --git a/crates/router/src/services/api.rs b/crates/router/src/services/api.rs
index df33e803ab8..e8af5b3b773 100644
--- a/crates/router/src/services/api.rs
+++ b/crates/router/src/services/api.rs
@@ -170,6 +170,8 @@ where
                     reason: None,
                     attempt_status: None,
                     connector_transaction_id: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 })
             } else {
                 None
@@ -359,6 +361,8 @@ where
                                     status_code: 504,
                                     attempt_status: None,
                                     connector_transaction_id: None,
+                                    issuer_error_code: None,
+                                    issuer_error_message: None,
                                 };
                                 router_data.response = Err(error_response);
                                 router_data.connector_http_status_code = Some(504);
diff --git a/crates/router/src/utils.rs b/crates/router/src/utils.rs
index f9ef4880924..59ee4e4fb38 100644
--- a/crates/router/src/utils.rs
+++ b/crates/router/src/utils.rs
@@ -699,6 +699,8 @@ pub fn handle_json_response_deserialization_failure(
                 reason: Some(response_data),
                 attempt_status: None,
                 connector_transaction_id: None,
+                issuer_error_code: None,
+                issuer_error_message: None,
             })
         }
     }
diff --git a/crates/router/src/workflows/payment_sync.rs b/crates/router/src/workflows/payment_sync.rs
index 64c4853d14b..dac001bac9d 100644
--- a/crates/router/src/workflows/payment_sync.rs
+++ b/crates/router/src/workflows/payment_sync.rs
@@ -154,6 +154,8 @@ impl ProcessTrackerWorkflow<SessionState> for PaymentsSyncWorkflow {
                             connector_transaction_id: None,
                             payment_method_data: None,
                             authentication_type: None,
+                            issuer_error_code: None,
+                            issuer_error_message: None,
                         };
 
                     payment_data.payment_attempt = db
diff --git a/crates/router/tests/payments.rs b/crates/router/tests/payments.rs
index 94dcba750af..0e57540e0ea 100644
--- a/crates/router/tests/payments.rs
+++ b/crates/router/tests/payments.rs
@@ -454,6 +454,8 @@ async fn payments_create_core() {
         connector_mandate_id: None,
         shipping_cost: None,
         card_discovery: None,
+        issuer_error_code: None,
+        issuer_error_message: None,
     };
     let expected_response =
         services::ApplicationResponse::JsonWithHeaders((expected_response, vec![]));
@@ -721,6 +723,8 @@ async fn payments_create_core_adyen_no_redirect() {
             connector_mandate_id: None,
             shipping_cost: None,
             card_discovery: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         },
         vec![],
     ));
diff --git a/crates/router/tests/payments2.rs b/crates/router/tests/payments2.rs
index 66cd41dbc74..19281b45019 100644
--- a/crates/router/tests/payments2.rs
+++ b/crates/router/tests/payments2.rs
@@ -215,6 +215,8 @@ async fn payments_create_core() {
         connector_mandate_id: None,
         shipping_cost: None,
         card_discovery: None,
+        issuer_error_code: None,
+        issuer_error_message: None,
     };
 
     let expected_response =
@@ -491,6 +493,8 @@ async fn payments_create_core_adyen_no_redirect() {
             connector_mandate_id: None,
             shipping_cost: None,
             card_discovery: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         },
         vec![],
     ));
diff --git a/crates/storage_impl/src/mock_db/payment_attempt.rs b/crates/storage_impl/src/mock_db/payment_attempt.rs
index 1e4efb2b350..2a637a77e23 100644
--- a/crates/storage_impl/src/mock_db/payment_attempt.rs
+++ b/crates/storage_impl/src/mock_db/payment_attempt.rs
@@ -229,6 +229,8 @@ impl PaymentAttemptInterface for MockDb {
             capture_before: payment_attempt.capture_before,
             card_discovery: payment_attempt.card_discovery,
             charges: None,
+            issuer_error_code: None,
+            issuer_error_message: None,
         };
         payment_attempts.push(payment_attempt.clone());
         Ok(payment_attempt)
diff --git a/crates/storage_impl/src/payments/payment_attempt.rs b/crates/storage_impl/src/payments/payment_attempt.rs
index 076b120c2d0..aaa709e7fa7 100644
--- a/crates/storage_impl/src/payments/payment_attempt.rs
+++ b/crates/storage_impl/src/payments/payment_attempt.rs
@@ -647,6 +647,8 @@ impl<T: DatabaseStore> PaymentAttemptInterface for KVRouterStore<T> {
                     capture_before: payment_attempt.capture_before,
                     card_discovery: payment_attempt.card_discovery,
                     charges: None,
+                    issuer_error_code: None,
+                    issuer_error_message: None,
                 };
 
                 let field = format!("pa_{}", created_attempt.attempt_id);
@@ -1648,6 +1650,8 @@ impl DataModelExt for PaymentAttempt {
             processor_transaction_data,
             card_discovery: self.card_discovery,
             charges: self.charges,
+            issuer_error_code: self.issuer_error_code,
+            issuer_error_message: self.issuer_error_message,
             // Below fields are deprecated. Please add any new fields above this line.
             connector_transaction_data: None,
         }
@@ -1731,6 +1735,8 @@ impl DataModelExt for PaymentAttempt {
             capture_before: storage_model.capture_before,
             card_discovery: storage_model.card_discovery,
             charges: storage_model.charges,
+            issuer_error_code: storage_model.issuer_error_code,
+            issuer_error_message: storage_model.issuer_error_message,
         }
     }
 }
diff --git a/migrations/2025-03-10-060950_add_issuer_code_and_message_in_payment_attempt/down.sql b/migrations/2025-03-10-060950_add_issuer_code_and_message_in_payment_attempt/down.sql
new file mode 100644
index 00000000000..06abb6aefbd
--- /dev/null
+++ b/migrations/2025-03-10-060950_add_issuer_code_and_message_in_payment_attempt/down.sql
@@ -0,0 +1,7 @@
+ALTER TABLE payment_attempt
+DROP COLUMN IF EXISTS issuer_error_code,
+DROP COLUMN IF EXISTS issuer_error_message;
+
+ALTER TABLE refund
+DROP COLUMN IF EXISTS issuer_error_code,
+DROP COLUMN IF EXISTS issuer_error_message;
\ No newline at end of file
diff --git a/migrations/2025-03-10-060950_add_issuer_code_and_message_in_payment_attempt/up.sql b/migrations/2025-03-10-060950_add_issuer_code_and_message_in_payment_attempt/up.sql
new file mode 100644
index 00000000000..80c1bc3742e
--- /dev/null
+++ b/migrations/2025-03-10-060950_add_issuer_code_and_message_in_payment_attempt/up.sql
@@ -0,0 +1,7 @@
+ALTER TABLE payment_attempt
+ADD COLUMN IF NOT EXISTS issuer_error_code VARCHAR(64) DEFAULT NULL,
+ADD COLUMN IF NOT EXISTS issuer_error_message TEXT DEFAULT NULL;
+
+ALTER TABLE refund
+ADD COLUMN IF NOT EXISTS issuer_error_code VARCHAR(64) DEFAULT NULL,
+ADD COLUMN IF NOT EXISTS issuer_error_message TEXT DEFAULT NULL;
\ No newline at end of file
diff --git a/v2_migrations/2025-01-13-081847_drop_v1_columns/up.sql b/v2_migrations/2025-01-13-081847_drop_v1_columns/up.sql
index b0a3f007eee..cbb2b264d45 100644
--- a/v2_migrations/2025-01-13-081847_drop_v1_columns/up.sql
+++ b/v2_migrations/2025-01-13-081847_drop_v1_columns/up.sql
@@ -89,7 +89,9 @@ ALTER TABLE payment_attempt DROP COLUMN attempt_id,
     DROP COLUMN authentication_data,
     DROP COLUMN payment_method_billing_address_id,
     DROP COLUMN connector_mandate_detail,
-    DROP COLUMN charge_id;
+    DROP COLUMN charge_id,
+    DROP COLUMN issuer_error_code,
+    DROP COLUMN issuer_error_message;
 
 
 ALTER TABLE payment_methods
@@ -113,7 +115,9 @@ DROP TYPE IF EXISTS "PaymentMethodIssuerCode";
 
 -- Run below queries only when V1 is deprecated
 ALTER TABLE refund DROP COLUMN connector_refund_data,
-    DROP COLUMN connector_transaction_data;
+    DROP COLUMN connector_transaction_data,
+    DROP COLUMN issuer_error_code,
+    DROP COLUMN issuer_error_message;
 
 -- Run below queries only when V1 is deprecated
 ALTER TABLE captures DROP COLUMN connector_capture_data;

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

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

## Description
This PR introduces -
- Core functionality to read and store raw acquirer responses for `payment` and `refund` operations.
    - Read raw acquirer response from connector integration
    - Store in `PaymentAttempt` and `Refund` tables
- Updates Adyen connector integration to read raw acquirer response.
- Exposes these fields in `/payments` and `/refunds` API response.

Described in #7467 

### 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
Helps HS consumer look at issuer specific error responses - these can be enabled on demand from connector's end.

## How did you test it?
Not possible to test raw acquirer codes in connector sandbox env. Can only be enabled and tested in production.


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