Bug: Setup future usage validations for recurring payments (CIT and MIT)



Setup Future Usage parameter to be used for saving PM for both CIT and MIT recurring payments. 

- If on-session, save card in locker and add PM for future payments based on (payment success + customer acceptance)
- If off-session, save card in locker set up for MITs with the connector and add MIT details to the PM table based on (customer acceptance)
- If customer acceptance is null in both cases, do not save the PM

NOTE: setup_future_usage : on-session will now come from the payments/create request and conveys the merchant's intention of saving it for future CIT payments. In payments/confirm call the customer acceptance of the on-session request will be provided.
diff --git a/crates/api_models/src/payments.rs b/crates/api_models/src/payments.rs
index 9a3afd2f0ff..d48be04b763 100644
--- a/crates/api_models/src/payments.rs
+++ b/crates/api_models/src/payments.rs
@@ -348,9 +348,12 @@ pub struct PaymentsRequest {
     #[remove_in(PaymentsUpdateRequest, PaymentsCreateRequest)]
     pub client_secret: Option<String>,
 
-    /// Passing this object during payments creates a mandate. The mandate_type sub object is passed by the server usually and the customer_acceptance sub object is usually passed by the SDK or client
+    /// Passing this object during payments creates a mandate. The mandate_type sub object is passed by the server.
     pub mandate_data: Option<MandateData>,
 
+    /// Passing this object during payments confirm . The customer_acceptance sub object is usually passed by the SDK or client
+    pub customer_acceptance: Option<CustomerAcceptance>,
+
     /// A unique identifier to link the payment to a mandate. To do Recurring payments after a mandate has been created, pass the mandate_id instead of payment_method_data
     #[schema(max_length = 255, example = "mandate_iwer89rnjef349dni3")]
     #[remove_in(PaymentsUpdateRequest)]
diff --git a/crates/common_enums/src/enums.rs b/crates/common_enums/src/enums.rs
index 6b25b692c12..dfa98634e27 100644
--- a/crates/common_enums/src/enums.rs
+++ b/crates/common_enums/src/enums.rs
@@ -1143,8 +1143,8 @@ pub enum IntentStatus {
 #[serde(rename_all = "snake_case")]
 #[strum(serialize_all = "snake_case")]
 pub enum FutureUsage {
-    #[default]
     OffSession,
+    #[default]
     OnSession,
 }
 
diff --git a/crates/data_models/src/mandates.rs b/crates/data_models/src/mandates.rs
index b4478f84ee9..fa22a4e57d5 100644
--- a/crates/data_models/src/mandates.rs
+++ b/crates/data_models/src/mandates.rs
@@ -113,6 +113,16 @@ impl From<ApiCustomerAcceptance> for CustomerAcceptance {
     }
 }
 
+impl From<CustomerAcceptance> for ApiCustomerAcceptance {
+    fn from(value: CustomerAcceptance) -> Self {
+        Self {
+            acceptance_type: value.acceptance_type.into(),
+            accepted_at: value.accepted_at,
+            online: value.online.map(|d| d.into()),
+        }
+    }
+}
+
 impl From<ApiAcceptanceType> for AcceptanceType {
     fn from(value: ApiAcceptanceType) -> Self {
         match value {
@@ -121,6 +131,14 @@ impl From<ApiAcceptanceType> for AcceptanceType {
         }
     }
 }
+impl From<AcceptanceType> for ApiAcceptanceType {
+    fn from(value: AcceptanceType) -> Self {
+        match value {
+            AcceptanceType::Online => Self::Online,
+            AcceptanceType::Offline => Self::Offline,
+        }
+    }
+}
 
 impl From<ApiOnlineMandate> for OnlineMandate {
     fn from(value: ApiOnlineMandate) -> Self {
@@ -130,6 +148,14 @@ impl From<ApiOnlineMandate> for OnlineMandate {
         }
     }
 }
+impl From<OnlineMandate> for ApiOnlineMandate {
+    fn from(value: OnlineMandate) -> Self {
+        Self {
+            ip_address: value.ip_address,
+            user_agent: value.user_agent,
+        }
+    }
+}
 
 impl CustomerAcceptance {
     pub fn get_ip_address(&self) -> Option<String> {
diff --git a/crates/router/src/core/mandate.rs b/crates/router/src/core/mandate.rs
index ec3bb7e4299..d07a8814c88 100644
--- a/crates/router/src/core/mandate.rs
+++ b/crates/router/src/core/mandate.rs
@@ -495,4 +495,5 @@ pub trait MandateBehaviour {
     fn set_mandate_id(&mut self, new_mandate_id: Option<api_models::payments::MandateIds>);
     fn get_payment_method_data(&self) -> api_models::payments::PaymentMethodData;
     fn get_setup_mandate_details(&self) -> Option<&data_models::mandates::MandateData>;
+    fn get_customer_acceptance(&self) -> Option<api_models::payments::CustomerAcceptance>;
 }
diff --git a/crates/router/src/core/payment_methods/cards.rs b/crates/router/src/core/payment_methods/cards.rs
index ce7f48405e2..4fdf957c842 100644
--- a/crates/router/src/core/payment_methods/cards.rs
+++ b/crates/router/src/core/payment_methods/cards.rs
@@ -81,6 +81,7 @@ pub async fn create_payment_method(
     locker_id: Option<String>,
     merchant_id: &str,
     pm_metadata: Option<serde_json::Value>,
+    customer_acceptance: Option<serde_json::Value>,
     payment_method_data: Option<Encryption>,
     key_store: &domain::MerchantKeyStore,
 ) -> errors::CustomResult<storage::PaymentMethod, errors::ApiErrorResponse> {
@@ -100,6 +101,7 @@ pub async fn create_payment_method(
             scheme: req.card_network.clone(),
             metadata: pm_metadata.map(masking::Secret::new),
             payment_method_data,
+            customer_acceptance: customer_acceptance.map(masking::Secret::new),
             ..storage::PaymentMethodNew::default()
         })
         .await
@@ -183,6 +185,7 @@ pub async fn get_or_insert_payment_method(
                     &merchant_account.merchant_id,
                     customer_id,
                     resp.metadata.clone().map(|val| val.expose()),
+                    None,
                     locker_id,
                 )
                 .await
@@ -367,6 +370,7 @@ pub async fn add_payment_method(
                 merchant_id,
                 &customer_id,
                 pm_metadata.cloned(),
+                None,
                 locker_id,
             )
             .await?;
@@ -385,6 +389,7 @@ pub async fn insert_payment_method(
     merchant_id: &str,
     customer_id: &str,
     pm_metadata: Option<serde_json::Value>,
+    customer_acceptance: Option<serde_json::Value>,
     locker_id: Option<String>,
 ) -> errors::RouterResult<diesel_models::PaymentMethod> {
     let pm_card_details = resp
@@ -400,6 +405,7 @@ pub async fn insert_payment_method(
         locker_id,
         merchant_id,
         pm_metadata,
+        customer_acceptance,
         pm_data_encrypted,
         key_store,
     )
diff --git a/crates/router/src/core/payments.rs b/crates/router/src/core/payments.rs
index 7e8fa2ae44d..88a437a087e 100644
--- a/crates/router/src/core/payments.rs
+++ b/crates/router/src/core/payments.rs
@@ -15,7 +15,7 @@ use std::{fmt::Debug, marker::PhantomData, ops::Deref, time::Instant, vec::IntoI
 
 use api_models::{self, enums, payments::HeaderPayload};
 use common_utils::{ext_traits::AsyncExt, pii, types::Surcharge};
-use data_models::mandates::MandateData;
+use data_models::mandates::{CustomerAcceptance, MandateData};
 use diesel_models::{ephemeral_key, fraud_check::FraudCheck};
 use error_stack::{IntoReport, ResultExt};
 use futures::future::join_all;
@@ -2049,6 +2049,7 @@ where
     pub mandate_connector: Option<MandateConnectorDetails>,
     pub currency: storage_enums::Currency,
     pub setup_mandate: Option<MandateData>,
+    pub customer_acceptance: Option<CustomerAcceptance>,
     pub address: PaymentAddress,
     pub token: Option<String>,
     pub confirm: Option<bool>,
diff --git a/crates/router/src/core/payments/flows/authorize_flow.rs b/crates/router/src/core/payments/flows/authorize_flow.rs
index d7d122c3252..cc2540aa221 100644
--- a/crates/router/src/core/payments/flows/authorize_flow.rs
+++ b/crates/router/src/core/payments/flows/authorize_flow.rs
@@ -99,7 +99,6 @@ impl Feature<api::Authorize, types::PaymentsAuthorizeData> for types::PaymentsAu
                     merchant_account,
                     self.request.payment_method_type,
                     key_store,
-                    is_mandate,
                 ))
                 .await?;
                 Ok(mandate::mandate_procedure(
@@ -131,7 +130,6 @@ impl Feature<api::Authorize, types::PaymentsAuthorizeData> for types::PaymentsAu
                         &merchant_account,
                         self.request.payment_method_type,
                         &key_store,
-                        is_mandate,
                     ))
                     .await;
 
@@ -294,6 +292,9 @@ impl mandate::MandateBehaviour for types::PaymentsAuthorizeData {
     fn set_mandate_id(&mut self, new_mandate_id: Option<api_models::payments::MandateIds>) {
         self.mandate_id = new_mandate_id;
     }
+    fn get_customer_acceptance(&self) -> Option<api_models::payments::CustomerAcceptance> {
+        self.customer_acceptance.clone().map(From::from)
+    }
 }
 
 pub async fn authorize_preprocessing_steps<F: Clone>(
diff --git a/crates/router/src/core/payments/flows/setup_mandate_flow.rs b/crates/router/src/core/payments/flows/setup_mandate_flow.rs
index 3f43204b986..71d43989336 100644
--- a/crates/router/src/core/payments/flows/setup_mandate_flow.rs
+++ b/crates/router/src/core/payments/flows/setup_mandate_flow.rs
@@ -98,7 +98,7 @@ impl Feature<api::SetupMandate, types::SetupMandateRequestData> for types::Setup
             )
             .await
             .to_setup_mandate_failed_response()?;
-            let is_mandate = resp.request.setup_mandate_details.is_some();
+
             let pm_id = Box::pin(tokenization::save_payment_method(
                 state,
                 connector,
@@ -107,7 +107,6 @@ impl Feature<api::SetupMandate, types::SetupMandateRequestData> for types::Setup
                 merchant_account,
                 self.request.payment_method_type,
                 key_store,
-                is_mandate,
             ))
             .await?;
             mandate::mandate_procedure(
@@ -234,8 +233,6 @@ impl types::SetupMandateRouterData {
 
                 let payment_method_type = self.request.payment_method_type;
 
-                let is_mandate = resp.request.setup_mandate_details.is_some();
-
                 let pm_id = Box::pin(tokenization::save_payment_method(
                     state,
                     connector,
@@ -244,7 +241,6 @@ impl types::SetupMandateRouterData {
                     merchant_account,
                     payment_method_type,
                     key_store,
-                    is_mandate,
                 ))
                 .await?;
 
@@ -320,7 +316,6 @@ impl types::SetupMandateRouterData {
             )
             .await
             .to_setup_mandate_failed_response()?;
-            let is_mandate = resp.request.setup_mandate_details.is_some();
             let pm_id = Box::pin(tokenization::save_payment_method(
                 state,
                 connector,
@@ -329,7 +324,6 @@ impl types::SetupMandateRouterData {
                 merchant_account,
                 self.request.payment_method_type,
                 key_store,
-                is_mandate,
             ))
             .await?;
             let mandate = state
@@ -430,6 +424,9 @@ impl mandate::MandateBehaviour for types::SetupMandateRequestData {
     fn get_setup_mandate_details(&self) -> Option<&data_models::mandates::MandateData> {
         self.setup_mandate_details.as_ref()
     }
+    fn get_customer_acceptance(&self) -> Option<api_models::payments::CustomerAcceptance> {
+        self.customer_acceptance.clone().map(From::from)
+    }
 }
 
 impl TryFrom<types::SetupMandateRequestData> for types::PaymentMethodTokenizationData {
diff --git a/crates/router/src/core/payments/helpers.rs b/crates/router/src/core/payments/helpers.rs
index d711bca7ab4..f0a5e38cca4 100644
--- a/crates/router/src/core/payments/helpers.rs
+++ b/crates/router/src/core/payments/helpers.rs
@@ -825,16 +825,6 @@ fn validate_new_mandate_request(
         .clone()
         .get_required_value("mandate_data")?;
 
-    if api_enums::FutureUsage::OnSession
-        == req
-            .setup_future_usage
-            .get_required_value("setup_future_usage")?
-    {
-        Err(report!(errors::ApiErrorResponse::PreconditionFailed {
-            message: "`setup_future_usage` must be `off_session` for mandates".into()
-        }))?
-    };
-
     // Only use this validation if the customer_acceptance is present
     if mandate_data
         .customer_acceptance
@@ -3855,3 +3845,17 @@ pub fn validate_session_expiry(session_expiry: u32) -> Result<(), errors::ApiErr
         Ok(())
     }
 }
+
+// This function validates the  mandate_data with its setup_future_usage
+pub fn validate_mandate_data_and_future_usage(
+    setup_future_usages: Option<api_enums::FutureUsage>,
+    mandate_details_present: bool,
+) -> Result<(), errors::ApiErrorResponse> {
+    if Some(api_enums::FutureUsage::OnSession) == setup_future_usages && mandate_details_present {
+        Err(errors::ApiErrorResponse::PreconditionFailed {
+            message: "`setup_future_usage` must be `off_session` for mandates".into(),
+        })
+    } else {
+        Ok(())
+    }
+}
diff --git a/crates/router/src/core/payments/operations/payment_approve.rs b/crates/router/src/core/payments/operations/payment_approve.rs
index caca29d8e2a..a38c7bbdd3c 100644
--- a/crates/router/src/core/payments/operations/payment_approve.rs
+++ b/crates/router/src/core/payments/operations/payment_approve.rs
@@ -147,6 +147,7 @@ impl<F: Send + Clone, Ctx: PaymentMethodRetrieve>
             mandate_id: None,
             mandate_connector: None,
             setup_mandate: None,
+            customer_acceptance: None,
             token: None,
             address: PaymentAddress {
                 shipping: shipping_address.as_ref().map(|a| a.into()),
diff --git a/crates/router/src/core/payments/operations/payment_cancel.rs b/crates/router/src/core/payments/operations/payment_cancel.rs
index 097b7ab40e1..1b09e9abce5 100644
--- a/crates/router/src/core/payments/operations/payment_cancel.rs
+++ b/crates/router/src/core/payments/operations/payment_cancel.rs
@@ -155,6 +155,7 @@ impl<F: Send + Clone, Ctx: PaymentMethodRetrieve>
             mandate_id: None,
             mandate_connector: None,
             setup_mandate: None,
+            customer_acceptance: None,
             token: None,
             address: PaymentAddress {
                 shipping: shipping_address.as_ref().map(|a| a.into()),
diff --git a/crates/router/src/core/payments/operations/payment_capture.rs b/crates/router/src/core/payments/operations/payment_capture.rs
index e9d520e4abc..4a488a07eb3 100644
--- a/crates/router/src/core/payments/operations/payment_capture.rs
+++ b/crates/router/src/core/payments/operations/payment_capture.rs
@@ -200,6 +200,7 @@ impl<F: Send + Clone, Ctx: PaymentMethodRetrieve>
             mandate_id: None,
             mandate_connector: None,
             setup_mandate: None,
+            customer_acceptance: None,
             token: None,
             address: payments::PaymentAddress {
                 shipping: shipping_address.as_ref().map(|a| a.into()),
diff --git a/crates/router/src/core/payments/operations/payment_complete_authorize.rs b/crates/router/src/core/payments/operations/payment_complete_authorize.rs
index f7e7598cf73..395f8e59dbc 100644
--- a/crates/router/src/core/payments/operations/payment_complete_authorize.rs
+++ b/crates/router/src/core/payments/operations/payment_complete_authorize.rs
@@ -215,6 +215,12 @@ impl<F: Send + Clone, Ctx: PaymentMethodRetrieve>
         // The operation merges mandate data from both request and payment_attempt
         let setup_mandate = setup_mandate.map(Into::into);
 
+        let mandate_details_present =
+            payment_attempt.mandate_details.is_some() || request.mandate_data.is_some();
+        helpers::validate_mandate_data_and_future_usage(
+            payment_intent.setup_future_usage,
+            mandate_details_present,
+        )?;
         let profile_id = payment_intent
             .profile_id
             .as_ref()
@@ -239,6 +245,7 @@ impl<F: Send + Clone, Ctx: PaymentMethodRetrieve>
             mandate_id: None,
             mandate_connector,
             setup_mandate,
+            customer_acceptance: None,
             token,
             address: PaymentAddress {
                 shipping: shipping_address.as_ref().map(|a| a.into()),
diff --git a/crates/router/src/core/payments/operations/payment_confirm.rs b/crates/router/src/core/payments/operations/payment_confirm.rs
index 5c47c3f323e..9117f406040 100644
--- a/crates/router/src/core/payments/operations/payment_confirm.rs
+++ b/crates/router/src/core/payments/operations/payment_confirm.rs
@@ -361,6 +361,7 @@ impl<F: Send + Clone, Ctx: PaymentMethodRetrieve>
             .change_context(errors::ApiErrorResponse::InvalidDataValue {
                 field_name: "browser_info",
             })?;
+        let customer_acceptance = request.customer_acceptance.clone().map(From::from);
 
         helpers::validate_card_data(
             request
@@ -461,6 +462,12 @@ impl<F: Send + Clone, Ctx: PaymentMethodRetrieve>
             sm
         });
 
+        let mandate_details_present =
+            payment_attempt.mandate_details.is_some() || request.mandate_data.is_some();
+        helpers::validate_mandate_data_and_future_usage(
+            payment_intent.setup_future_usage,
+            mandate_details_present,
+        )?;
         let n_request_payment_method_data = request
             .payment_method_data
             .as_ref()
@@ -539,6 +546,7 @@ impl<F: Send + Clone, Ctx: PaymentMethodRetrieve>
             mandate_id: None,
             mandate_connector,
             setup_mandate,
+            customer_acceptance,
             token,
             address: PaymentAddress {
                 shipping: shipping_address.as_ref().map(|a| a.into()),
diff --git a/crates/router/src/core/payments/operations/payment_create.rs b/crates/router/src/core/payments/operations/payment_create.rs
index 11ab21b891d..2c07f4249e8 100644
--- a/crates/router/src/core/payments/operations/payment_create.rs
+++ b/crates/router/src/core/payments/operations/payment_create.rs
@@ -281,6 +281,12 @@ impl<F: Send + Clone, Ctx: PaymentMethodRetrieve>
             .to_duplicate_response(errors::ApiErrorResponse::DuplicatePayment {
                 payment_id: payment_id.clone(),
             })?;
+        let mandate_details_present = payment_attempt.mandate_details.is_some();
+
+        helpers::validate_mandate_data_and_future_usage(
+            request.setup_future_usage,
+            mandate_details_present,
+        )?;
         // connector mandate reference update history
         let mandate_id = request
             .mandate_id
@@ -355,6 +361,8 @@ impl<F: Send + Clone, Ctx: PaymentMethodRetrieve>
         // The operation merges mandate data from both request and payment_attempt
         let setup_mandate = setup_mandate.map(MandateData::from);
 
+        let customer_acceptance = request.customer_acceptance.clone().map(From::from);
+
         let surcharge_details = request.surcharge_details.map(|request_surcharge_details| {
             payments::types::SurchargeDetails::from((&request_surcharge_details, &payment_attempt))
         });
@@ -368,6 +376,7 @@ impl<F: Send + Clone, Ctx: PaymentMethodRetrieve>
                     .payment_method_data
                     .apply_additional_payment_data(additional_payment_data)
             });
+
         let amount = payment_attempt.get_total_amount().into();
         let payment_data = PaymentData {
             flow: PhantomData,
@@ -379,6 +388,7 @@ impl<F: Send + Clone, Ctx: PaymentMethodRetrieve>
             mandate_id,
             mandate_connector,
             setup_mandate,
+            customer_acceptance,
             token,
             address: PaymentAddress {
                 shipping: shipping_address.as_ref().map(|a| a.into()),
diff --git a/crates/router/src/core/payments/operations/payment_reject.rs b/crates/router/src/core/payments/operations/payment_reject.rs
index 281ffdd06f7..a1416ea1908 100644
--- a/crates/router/src/core/payments/operations/payment_reject.rs
+++ b/crates/router/src/core/payments/operations/payment_reject.rs
@@ -143,6 +143,7 @@ impl<F: Send + Clone, Ctx: PaymentMethodRetrieve>
             mandate_id: None,
             mandate_connector: None,
             setup_mandate: None,
+            customer_acceptance: None,
             token: None,
             address: PaymentAddress {
                 shipping: shipping_address.as_ref().map(|a| a.into()),
diff --git a/crates/router/src/core/payments/operations/payment_session.rs b/crates/router/src/core/payments/operations/payment_session.rs
index 966600a5498..ed3eda8832b 100644
--- a/crates/router/src/core/payments/operations/payment_session.rs
+++ b/crates/router/src/core/payments/operations/payment_session.rs
@@ -167,6 +167,7 @@ impl<F: Send + Clone, Ctx: PaymentMethodRetrieve>
             email: None,
             mandate_id: None,
             mandate_connector: None,
+            customer_acceptance: None,
             token: None,
             setup_mandate: None,
             address: payments::PaymentAddress {
diff --git a/crates/router/src/core/payments/operations/payment_start.rs b/crates/router/src/core/payments/operations/payment_start.rs
index 2ca413b73aa..650fef7e1bf 100644
--- a/crates/router/src/core/payments/operations/payment_start.rs
+++ b/crates/router/src/core/payments/operations/payment_start.rs
@@ -145,6 +145,7 @@ impl<F: Send + Clone, Ctx: PaymentMethodRetrieve>
             mandate_id: None,
             mandate_connector: None,
             setup_mandate: None,
+            customer_acceptance: None,
             token: payment_attempt.payment_token.clone(),
             address: PaymentAddress {
                 shipping: shipping_address.as_ref().map(|a| a.into()),
diff --git a/crates/router/src/core/payments/operations/payment_status.rs b/crates/router/src/core/payments/operations/payment_status.rs
index aa622b3558b..70f04ed364d 100644
--- a/crates/router/src/core/payments/operations/payment_status.rs
+++ b/crates/router/src/core/payments/operations/payment_status.rs
@@ -414,6 +414,7 @@ async fn get_tracker_for_sync<
             }),
         mandate_connector: None,
         setup_mandate: None,
+        customer_acceptance: None,
         token: None,
         address: PaymentAddress {
             shipping: shipping_address.as_ref().map(|a| a.into()),
diff --git a/crates/router/src/core/payments/operations/payment_update.rs b/crates/router/src/core/payments/operations/payment_update.rs
index cd73df26ff3..7661ee515d9 100644
--- a/crates/router/src/core/payments/operations/payment_update.rs
+++ b/crates/router/src/core/payments/operations/payment_update.rs
@@ -349,7 +349,12 @@ impl<F: Send + Clone, Ctx: PaymentMethodRetrieve>
 
         // The operation merges mandate data from both request and payment_attempt
         let setup_mandate = setup_mandate.map(Into::into);
-
+        let mandate_details_present =
+            payment_attempt.mandate_details.is_some() || request.mandate_data.is_some();
+        helpers::validate_mandate_data_and_future_usage(
+            payment_intent.setup_future_usage,
+            mandate_details_present,
+        )?;
         let profile_id = payment_intent
             .profile_id
             .as_ref()
@@ -363,7 +368,7 @@ impl<F: Send + Clone, Ctx: PaymentMethodRetrieve>
             .to_not_found_response(errors::ApiErrorResponse::BusinessProfileNotFound {
                 id: profile_id.to_string(),
             })?;
-
+        let customer_acceptance = request.customer_acceptance.clone().map(From::from);
         let surcharge_details = request.surcharge_details.map(|request_surcharge_details| {
             payments::types::SurchargeDetails::from((&request_surcharge_details, &payment_attempt))
         });
@@ -379,6 +384,7 @@ impl<F: Send + Clone, Ctx: PaymentMethodRetrieve>
             mandate_connector,
             token,
             setup_mandate,
+            customer_acceptance,
             address: PaymentAddress {
                 shipping: shipping_address.as_ref().map(|a| a.into()),
                 billing: billing_address.as_ref().map(|a| a.into()),
diff --git a/crates/router/src/core/payments/operations/payments_incremental_authorization.rs b/crates/router/src/core/payments/operations/payments_incremental_authorization.rs
index 24292507c0e..96cbf9fb9db 100644
--- a/crates/router/src/core/payments/operations/payments_incremental_authorization.rs
+++ b/crates/router/src/core/payments/operations/payments_incremental_authorization.rs
@@ -120,6 +120,7 @@ impl<F: Send + Clone, Ctx: PaymentMethodRetrieve>
             mandate_id: None,
             mandate_connector: None,
             setup_mandate: None,
+            customer_acceptance: None,
             token: None,
             address: PaymentAddress {
                 billing: None,
diff --git a/crates/router/src/core/payments/tokenization.rs b/crates/router/src/core/payments/tokenization.rs
index 1f793e2e185..943550ef434 100644
--- a/crates/router/src/core/payments/tokenization.rs
+++ b/crates/router/src/core/payments/tokenization.rs
@@ -1,6 +1,9 @@
 use api_models::payment_methods::PaymentMethodsData;
 use common_enums::PaymentMethod;
-use common_utils::{ext_traits::ValueExt, pii};
+use common_utils::{
+    ext_traits::{Encode, ValueExt},
+    pii,
+};
 use error_stack::{report, ResultExt};
 use masking::ExposeInterface;
 use router_env::{instrument, tracing};
@@ -34,7 +37,6 @@ pub async fn save_payment_method<F: Clone, FData>(
     merchant_account: &domain::MerchantAccount,
     payment_method_type: Option<storage_enums::PaymentMethodType>,
     key_store: &domain::MerchantKeyStore,
-    is_mandate: bool,
 ) -> RouterResult<Option<String>>
 where
     FData: mandate::MandateBehaviour,
@@ -67,16 +69,24 @@ where
             } else {
                 None
             };
-            let future_usage_validation = resp
+
+            let mandate_data_customer_acceptance = resp
                 .request
-                .get_setup_future_usage()
-                .map(|future_usage| {
-                    (future_usage == storage_enums::FutureUsage::OffSession && is_mandate)
-                        || (future_usage == storage_enums::FutureUsage::OnSession && !is_mandate)
-                })
-                .unwrap_or(false);
+                .get_setup_mandate_details()
+                .and_then(|mandate_data| mandate_data.customer_acceptance.clone());
+
+            let customer_acceptance = resp
+                .request
+                .get_customer_acceptance()
+                .or(mandate_data_customer_acceptance.clone().map(From::from))
+                .map(|ca| ca.encode_to_value())
+                .transpose()
+                .change_context(errors::ApiErrorResponse::InternalServerError)
+                .attach_printable("Unable to serialize customer acceptance to value")?;
 
-            let pm_id = if future_usage_validation {
+            let pm_id = if resp.request.get_setup_future_usage().is_some()
+                && customer_acceptance.is_some()
+            {
                 let customer = maybe_customer.to_owned().get_required_value("customer")?;
                 let payment_method_create_request = helpers::get_payment_method_create_request(
                     Some(&resp.request.get_payment_method_data()),
@@ -181,6 +191,7 @@ where
                                             locker_id,
                                             merchant_id,
                                             pm_metadata,
+                                            customer_acceptance,
                                             pm_data_encrypted,
                                             key_store,
                                         )
@@ -243,6 +254,7 @@ where
                                                     &merchant_account.merchant_id,
                                                     &customer.customer_id,
                                                     resp.metadata.clone().map(|val| val.expose()),
+                                                    customer_acceptance,
                                                     locker_id,
                                                 )
                                                 .await
@@ -357,6 +369,7 @@ where
                             locker_id,
                             merchant_id,
                             pm_metadata,
+                            customer_acceptance,
                             pm_data_encrypted,
                             key_store,
                         )
diff --git a/crates/router/src/core/payments/transformers.rs b/crates/router/src/core/payments/transformers.rs
index 7c7bac80cf0..8ccab155c69 100644
--- a/crates/router/src/core/payments/transformers.rs
+++ b/crates/router/src/core/payments/transformers.rs
@@ -1141,6 +1141,7 @@ impl<F: Clone> TryFrom<PaymentAdditionalData<'_, F>> for types::PaymentsAuthoriz
                     | Some(RequestIncrementalAuthorization::Default)
             ),
             metadata: additional_data.payment_data.payment_intent.metadata,
+            customer_acceptance: payment_data.customer_acceptance,
         })
     }
 }
@@ -1436,6 +1437,7 @@ impl<F: Clone> TryFrom<PaymentAdditionalData<'_, F>> for types::SetupMandateRequ
             off_session: payment_data.mandate_id.as_ref().map(|_| true),
             mandate_id: payment_data.mandate_id.clone(),
             setup_mandate_details: payment_data.setup_mandate,
+            customer_acceptance: payment_data.customer_acceptance,
             router_return_url,
             email: payment_data.email,
             customer_name,
diff --git a/crates/router/src/core/payouts/helpers.rs b/crates/router/src/core/payouts/helpers.rs
index fcd2569ea99..7005e955dff 100644
--- a/crates/router/src/core/payouts/helpers.rs
+++ b/crates/router/src/core/payouts/helpers.rs
@@ -382,6 +382,7 @@ pub async fn save_payout_data_to_locker(
         Some(stored_resp.card_reference),
         &merchant_account.merchant_id,
         None,
+        None,
         card_details_encrypted,
         key_store,
     )
diff --git a/crates/router/src/types.rs b/crates/router/src/types.rs
index 07691879d4a..106872fb43f 100644
--- a/crates/router/src/types.rs
+++ b/crates/router/src/types.rs
@@ -24,7 +24,7 @@ pub use api_models::{
 use common_enums::MandateStatus;
 pub use common_utils::request::{RequestBody, RequestContent};
 use common_utils::{pii, pii::Email};
-use data_models::mandates::MandateData;
+use data_models::mandates::{CustomerAcceptance, MandateData};
 use error_stack::{IntoReport, ResultExt};
 use masking::Secret;
 use serde::Serialize;
@@ -408,6 +408,7 @@ pub struct PaymentsAuthorizeData {
     pub setup_future_usage: Option<storage_enums::FutureUsage>,
     pub mandate_id: Option<api_models::payments::MandateIds>,
     pub off_session: Option<bool>,
+    pub customer_acceptance: Option<CustomerAcceptance>,
     pub setup_mandate_details: Option<MandateData>,
     pub browser_info: Option<BrowserInformation>,
     pub order_details: Option<Vec<api_models::payments::OrderDetailsWithAmount>>,
@@ -584,6 +585,7 @@ pub struct SetupMandateRequestData {
     pub amount: Option<i64>,
     pub confirm: bool,
     pub statement_descriptor_suffix: Option<String>,
+    pub customer_acceptance: Option<CustomerAcceptance>,
     pub mandate_id: Option<api_models::payments::MandateIds>,
     pub setup_future_usage: Option<storage_enums::FutureUsage>,
     pub off_session: Option<bool>,
@@ -1423,6 +1425,7 @@ impl From<&SetupMandateRouterData> for PaymentsAuthorizeData {
             surcharge_details: None,
             request_incremental_authorization: data.request.request_incremental_authorization,
             metadata: None,
+            customer_acceptance: data.request.customer_acceptance.clone(),
         }
     }
 }
diff --git a/crates/router/src/types/api/verify_connector.rs b/crates/router/src/types/api/verify_connector.rs
index 221d16a8b46..4f3d6f7e296 100644
--- a/crates/router/src/types/api/verify_connector.rs
+++ b/crates/router/src/types/api/verify_connector.rs
@@ -50,6 +50,7 @@ impl VerifyConnectorData {
             related_transaction_id: None,
             statement_descriptor_suffix: None,
             request_incremental_authorization: false,
+            customer_acceptance: None,
         }
     }
 
diff --git a/crates/router/tests/connectors/aci.rs b/crates/router/tests/connectors/aci.rs
index d3f8147fb26..5c4660805fb 100644
--- a/crates/router/tests/connectors/aci.rs
+++ b/crates/router/tests/connectors/aci.rs
@@ -72,6 +72,7 @@ fn construct_payment_router_data() -> types::PaymentsAuthorizeRouterData {
             surcharge_details: None,
             request_incremental_authorization: false,
             metadata: None,
+            customer_acceptance: None,
         },
         response: Err(types::ErrorResponse::default()),
         payment_method_id: None,
diff --git a/crates/router/tests/connectors/adyen.rs b/crates/router/tests/connectors/adyen.rs
index 12812a70857..55f9f6b4b6b 100644
--- a/crates/router/tests/connectors/adyen.rs
+++ b/crates/router/tests/connectors/adyen.rs
@@ -170,6 +170,7 @@ impl AdyenTest {
             surcharge_details: None,
             request_incremental_authorization: false,
             metadata: None,
+            customer_acceptance: None,
         })
     }
 }
diff --git a/crates/router/tests/connectors/bitpay.rs b/crates/router/tests/connectors/bitpay.rs
index d24e20cd660..93043f37c9b 100644
--- a/crates/router/tests/connectors/bitpay.rs
+++ b/crates/router/tests/connectors/bitpay.rs
@@ -96,6 +96,7 @@ fn payment_method_details() -> Option<types::PaymentsAuthorizeData> {
         surcharge_details: None,
         request_incremental_authorization: false,
         metadata: None,
+        customer_acceptance: None,
     })
 }
 
diff --git a/crates/router/tests/connectors/cashtocode.rs b/crates/router/tests/connectors/cashtocode.rs
index a9d81d2bb62..7dd70d86695 100644
--- a/crates/router/tests/connectors/cashtocode.rs
+++ b/crates/router/tests/connectors/cashtocode.rs
@@ -70,6 +70,7 @@ impl CashtocodeTest {
             surcharge_details: None,
             request_incremental_authorization: false,
             metadata: None,
+            customer_acceptance: None,
         })
     }
 
diff --git a/crates/router/tests/connectors/coinbase.rs b/crates/router/tests/connectors/coinbase.rs
index 7a872ecb585..b1fffb302cb 100644
--- a/crates/router/tests/connectors/coinbase.rs
+++ b/crates/router/tests/connectors/coinbase.rs
@@ -98,6 +98,7 @@ fn payment_method_details() -> Option<types::PaymentsAuthorizeData> {
         surcharge_details: None,
         request_incremental_authorization: false,
         metadata: None,
+        customer_acceptance: None,
     })
 }
 
diff --git a/crates/router/tests/connectors/cryptopay.rs b/crates/router/tests/connectors/cryptopay.rs
index d61a93c8b82..6eaf514db21 100644
--- a/crates/router/tests/connectors/cryptopay.rs
+++ b/crates/router/tests/connectors/cryptopay.rs
@@ -96,6 +96,7 @@ fn payment_method_details() -> Option<types::PaymentsAuthorizeData> {
         surcharge_details: None,
         request_incremental_authorization: false,
         metadata: None,
+        customer_acceptance: None,
     })
 }
 
diff --git a/crates/router/tests/connectors/opennode.rs b/crates/router/tests/connectors/opennode.rs
index 8415be949a0..4702012597e 100644
--- a/crates/router/tests/connectors/opennode.rs
+++ b/crates/router/tests/connectors/opennode.rs
@@ -97,6 +97,7 @@ fn payment_method_details() -> Option<types::PaymentsAuthorizeData> {
         surcharge_details: None,
         request_incremental_authorization: false,
         metadata: None,
+        customer_acceptance: None,
     })
 }
 
diff --git a/crates/router/tests/connectors/utils.rs b/crates/router/tests/connectors/utils.rs
index 8f749a0b2ff..83380f76073 100644
--- a/crates/router/tests/connectors/utils.rs
+++ b/crates/router/tests/connectors/utils.rs
@@ -915,6 +915,7 @@ impl Default for PaymentAuthorizeType {
             surcharge_details: None,
             request_incremental_authorization: false,
             metadata: None,
+            customer_acceptance: None,
         };
         Self(data)
     }
diff --git a/crates/router/tests/connectors/worldline.rs b/crates/router/tests/connectors/worldline.rs
index c5b12a0b0b2..ba946b296bf 100644
--- a/crates/router/tests/connectors/worldline.rs
+++ b/crates/router/tests/connectors/worldline.rs
@@ -106,6 +106,7 @@ impl WorldlineTest {
             surcharge_details: None,
             request_incremental_authorization: false,
             metadata: None,
+            customer_acceptance: None,
         })
     }
 }
diff --git a/openapi/openapi_spec.json b/openapi/openapi_spec.json
index 293bfc85a7c..1a3e71f38c0 100644
--- a/openapi/openapi_spec.json
+++ b/openapi/openapi_spec.json
@@ -12529,6 +12529,14 @@
             ],
             "nullable": true
           },
+          "customer_acceptance": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CustomerAcceptance"
+              }
+            ],
+            "nullable": true
+          },
           "mandate_id": {
             "type": "string",
             "description": "A unique identifier to link the payment to a mandate. To do Recurring payments after a mandate has been created, pass the mandate_id instead of payment_method_data",
@@ -12880,6 +12888,14 @@
             ],
             "nullable": true
           },
+          "customer_acceptance": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CustomerAcceptance"
+              }
+            ],
+            "nullable": true
+          },
           "mandate_id": {
             "type": "string",
             "description": "A unique identifier to link the payment to a mandate. To do Recurring payments after a mandate has been created, pass the mandate_id instead of payment_method_data",
@@ -13286,6 +13302,14 @@
             ],
             "nullable": true
           },
+          "customer_acceptance": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CustomerAcceptance"
+              }
+            ],
+            "nullable": true
+          },
           "mandate_id": {
             "type": "string",
             "description": "A unique identifier to link the payment to a mandate. To do Recurring payments after a mandate has been created, pass the mandate_id instead of payment_method_data",
@@ -14277,6 +14301,14 @@
             ],
             "nullable": true
           },
+          "customer_acceptance": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CustomerAcceptance"
+              }
+            ],
+            "nullable": true
+          },
           "browser_info": {
             "allOf": [
               {
diff --git a/postman/collection-dir/aci/Flow Testcases/Happy Cases/Scenario11-Create a mandate and recurring payment/Payments - Create/request.json b/postman/collection-dir/aci/Flow Testcases/Happy Cases/Scenario11-Create a mandate and recurring payment/Payments - Create/request.json
index f7573b64a60..9988d0e2cb1 100644
--- a/postman/collection-dir/aci/Flow Testcases/Happy Cases/Scenario11-Create a mandate and recurring payment/Payments - Create/request.json	
+++ b/postman/collection-dir/aci/Flow Testcases/Happy Cases/Scenario11-Create a mandate and recurring payment/Payments - Create/request.json	
@@ -59,6 +59,14 @@
           }
         }
       },
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "billing": {
         "address": {
           "line1": "1467",
diff --git a/postman/collection-dir/aci/Flow Testcases/Happy Cases/Scenario11-Refund recurring payment/Payments - Create/request.json b/postman/collection-dir/aci/Flow Testcases/Happy Cases/Scenario11-Refund recurring payment/Payments - Create/request.json
index b66df150887..9570f0f0b8d 100644
--- a/postman/collection-dir/aci/Flow Testcases/Happy Cases/Scenario11-Refund recurring payment/Payments - Create/request.json	
+++ b/postman/collection-dir/aci/Flow Testcases/Happy Cases/Scenario11-Refund recurring payment/Payments - Create/request.json	
@@ -59,6 +59,14 @@
           }
         }
       },
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "shipping": {
         "address": {
           "line1": "1467",
diff --git a/postman/collection-dir/aci/Flow Testcases/Variation Cases/Scenario9-Create a recurring payment with greater mandate amount/Payments - Create/request.json b/postman/collection-dir/aci/Flow Testcases/Variation Cases/Scenario9-Create a recurring payment with greater mandate amount/Payments - Create/request.json
index f7573b64a60..9988d0e2cb1 100644
--- a/postman/collection-dir/aci/Flow Testcases/Variation Cases/Scenario9-Create a recurring payment with greater mandate amount/Payments - Create/request.json	
+++ b/postman/collection-dir/aci/Flow Testcases/Variation Cases/Scenario9-Create a recurring payment with greater mandate amount/Payments - Create/request.json	
@@ -59,6 +59,14 @@
           }
         }
       },
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "billing": {
         "address": {
           "line1": "1467",
diff --git a/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario10-Create a mandate and recurring payment/Payments - Create/request.json b/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario10-Create a mandate and recurring payment/Payments - Create/request.json
index 80dad74bb60..0bf892efdf5 100644
--- a/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario10-Create a mandate and recurring payment/Payments - Create/request.json	
+++ b/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario10-Create a mandate and recurring payment/Payments - Create/request.json	
@@ -60,6 +60,14 @@
           }
         }
       },
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "billing": {
         "address": {
           "line1": "1467",
diff --git a/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario14-Refund recurring payment/Payments - Create/request.json b/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario14-Refund recurring payment/Payments - Create/request.json
index 08e62dca6e9..a515beb2661 100644
--- a/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario14-Refund recurring payment/Payments - Create/request.json	
+++ b/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario14-Refund recurring payment/Payments - Create/request.json	
@@ -60,6 +60,14 @@
           }
         }
       },
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "shipping": {
         "address": {
           "line1": "1467",
diff --git a/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario16-Bank debit-ach/Payments - Create/request.json b/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario16-Bank debit-ach/Payments - Create/request.json
index 21c079e0ad0..eecdf810746 100644
--- a/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario16-Bank debit-ach/Payments - Create/request.json	
+++ b/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario16-Bank debit-ach/Payments - Create/request.json	
@@ -32,6 +32,14 @@
       "authentication_type": "three_ds",
       "return_url": "https://duck.com",
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "billing": {
         "address": {
           "line1": "1467",
diff --git a/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario17-Bank debit-Bacs/Payments - Create/request.json b/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario17-Bank debit-Bacs/Payments - Create/request.json
index 1ec9a829a48..660ef06c518 100644
--- a/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario17-Bank debit-Bacs/Payments - Create/request.json	
+++ b/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario17-Bank debit-Bacs/Payments - Create/request.json	
@@ -32,6 +32,14 @@
       "authentication_type": "no_three_ds",
       "return_url": "https://duck.com",
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "billing": {
         "address": {
           "line1": "1467",
diff --git a/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario19-Add card flow/Payments - Create/request.json b/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario19-Add card flow/Payments - Create/request.json
index 9260edb1a99..397f164511f 100644
--- a/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario19-Add card flow/Payments - Create/request.json	
+++ b/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario19-Add card flow/Payments - Create/request.json	
@@ -33,6 +33,14 @@
       "authentication_type": "no_three_ds",
       "return_url": "https://google.com",
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "payment_method": "card",
       "payment_method_type": "credit",
       "payment_method_data": {
@@ -89,12 +97,8 @@
   },
   "url": {
     "raw": "{{baseUrl}}/payments",
-    "host": [
-      "{{baseUrl}}"
-    ],
-    "path": [
-      "payments"
-    ]
+    "host": ["{{baseUrl}}"],
+    "path": ["payments"]
   },
   "description": "To process a payment you will have to create a payment, attach a payment method and confirm. Depending on the user journey you wish to achieve, you may opt to all the steps in a single request or in a sequence of API request using following APIs: (i) Payments - Update, (ii) Payments - Confirm, and (iii) Payments - Capture"
 }
diff --git a/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario20-Pass Invalid CVV for save card flow and verify failed payment/Payments - Create/request.json b/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario20-Pass Invalid CVV for save card flow and verify failed payment/Payments - Create/request.json
index 9260edb1a99..397f164511f 100644
--- a/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario20-Pass Invalid CVV for save card flow and verify failed payment/Payments - Create/request.json	
+++ b/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario20-Pass Invalid CVV for save card flow and verify failed payment/Payments - Create/request.json	
@@ -33,6 +33,14 @@
       "authentication_type": "no_three_ds",
       "return_url": "https://google.com",
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "payment_method": "card",
       "payment_method_type": "credit",
       "payment_method_data": {
@@ -89,12 +97,8 @@
   },
   "url": {
     "raw": "{{baseUrl}}/payments",
-    "host": [
-      "{{baseUrl}}"
-    ],
-    "path": [
-      "payments"
-    ]
+    "host": ["{{baseUrl}}"],
+    "path": ["payments"]
   },
   "description": "To process a payment you will have to create a payment, attach a payment method and confirm. Depending on the user journey you wish to achieve, you may opt to all the steps in a single request or in a sequence of API request using following APIs: (i) Payments - Update, (ii) Payments - Confirm, and (iii) Payments - Capture"
 }
diff --git a/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario21-Don't Pass CVV for save card flow and verify failed payment Copy/Payments - Create/request.json b/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario21-Don't Pass CVV for save card flow and verify failed payment Copy/Payments - Create/request.json
index 9260edb1a99..397f164511f 100644
--- a/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario21-Don't Pass CVV for save card flow and verify failed payment Copy/Payments - Create/request.json	
+++ b/postman/collection-dir/adyen_uk/Flow Testcases/Happy Cases/Scenario21-Don't Pass CVV for save card flow and verify failed payment Copy/Payments - Create/request.json	
@@ -33,6 +33,14 @@
       "authentication_type": "no_three_ds",
       "return_url": "https://google.com",
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "payment_method": "card",
       "payment_method_type": "credit",
       "payment_method_data": {
@@ -89,12 +97,8 @@
   },
   "url": {
     "raw": "{{baseUrl}}/payments",
-    "host": [
-      "{{baseUrl}}"
-    ],
-    "path": [
-      "payments"
-    ]
+    "host": ["{{baseUrl}}"],
+    "path": ["payments"]
   },
   "description": "To process a payment you will have to create a payment, attach a payment method and confirm. Depending on the user journey you wish to achieve, you may opt to all the steps in a single request or in a sequence of API request using following APIs: (i) Payments - Update, (ii) Payments - Confirm, and (iii) Payments - Capture"
 }
diff --git a/postman/collection-dir/adyen_uk/Flow Testcases/Variation Cases/Scenario9-Create a recurring payment with greater mandate amount/Payments - Create/request.json b/postman/collection-dir/adyen_uk/Flow Testcases/Variation Cases/Scenario9-Create a recurring payment with greater mandate amount/Payments - Create/request.json
index 93e802128f2..40a78911a9a 100644
--- a/postman/collection-dir/adyen_uk/Flow Testcases/Variation Cases/Scenario9-Create a recurring payment with greater mandate amount/Payments - Create/request.json	
+++ b/postman/collection-dir/adyen_uk/Flow Testcases/Variation Cases/Scenario9-Create a recurring payment with greater mandate amount/Payments - Create/request.json	
@@ -59,6 +59,14 @@
           }
         }
       },
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "billing": {
         "address": {
           "line1": "1467",
diff --git a/postman/collection-dir/authorizedotnet/Flow Testcases/Variation Cases/Scenario11-Create a recurring payment with greater mandate amount/Payments - Create/request.json b/postman/collection-dir/authorizedotnet/Flow Testcases/Variation Cases/Scenario11-Create a recurring payment with greater mandate amount/Payments - Create/request.json
index e3d19912b79..d152474c374 100644
--- a/postman/collection-dir/authorizedotnet/Flow Testcases/Variation Cases/Scenario11-Create a recurring payment with greater mandate amount/Payments - Create/request.json	
+++ b/postman/collection-dir/authorizedotnet/Flow Testcases/Variation Cases/Scenario11-Create a recurring payment with greater mandate amount/Payments - Create/request.json	
@@ -59,6 +59,14 @@
           }
         }
       },
+      "customer_acceptance": {
+        "acceptance_type": "online",
+        "accepted_at": "2022-09-10T10:11:12Z",
+        "online": {
+          "ip_address": "123.32.25.123",
+          "user_agent": "Mozilla/5.0 (Linux; Android 12; SM-S906N Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.119 Mobile Safari/537.36"
+        }
+      },
       "billing": {
         "address": {
           "line1": "1467",
diff --git a/postman/collection-dir/bankofamerica/Flow Testcases/Happy Cases/Scenario1-Create payment with confirm true/Payments - Create/request.json b/postman/collection-dir/bankofamerica/Flow Testcases/Happy Cases/Scenario1-Create payment with confirm true/Payments - Create/request.json
index e37391b78b5..43eb0c9cc12 100644
--- a/postman/collection-dir/bankofamerica/Flow Testcases/Happy Cases/Scenario1-Create payment with confirm true/Payments - Create/request.json	
+++ b/postman/collection-dir/bankofamerica/Flow Testcases/Happy Cases/Scenario1-Create payment with confirm true/Payments - Create/request.json	
@@ -35,6 +35,14 @@
       "authentication_type": "no_three_ds",
       "return_url": "https://duck.com",
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "online",
+        "accepted_at": "2022-09-10T10:11:12Z",
+        "online": {
+          "ip_address": "123.32.25.123",
+          "user_agent": "Mozilla/5.0 (Linux; Android 12; SM-S906N Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.119 Mobile Safari/537.36"
+        }
+      },
       "payment_method": "card",
       "payment_method_type": "debit",
       "payment_method_data": {
@@ -87,12 +95,8 @@
   },
   "url": {
     "raw": "{{baseUrl}}/payments",
-    "host": [
-      "{{baseUrl}}"
-    ],
-    "path": [
-      "payments"
-    ]
+    "host": ["{{baseUrl}}"],
+    "path": ["payments"]
   },
   "description": "To process a payment you will have to create a payment, attach a payment method and confirm. Depending on the user journey you wish to achieve, you may opt to all the steps in a single request or in a sequence of API request using following APIs: (i) Payments - Update, (ii) Payments - Confirm, and (iii) Payments - Capture"
 }
diff --git a/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario12-Add card flow/Payments - Create/request.json b/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario12-Add card flow/Payments - Create/request.json
index 056b9269a29..d0320b09975 100644
--- a/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario12-Add card flow/Payments - Create/request.json	
+++ b/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario12-Add card flow/Payments - Create/request.json	
@@ -33,6 +33,14 @@
       "authentication_type": "no_three_ds",
       "return_url": "https://duck.com",
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "online",
+        "accepted_at": "2022-09-10T10:11:12Z",
+        "online": {
+          "ip_address": "123.32.25.123",
+          "user_agent": "Mozilla/5.0 (Linux; Android 12; SM-S906N Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.119 Mobile Safari/537.36"
+        }
+      },
       "payment_method": "card",
       "payment_method_type": "credit",
       "payment_method_data": {
diff --git a/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario13-Don't Pass CVV for save card flow and verify success payment/Payments - Create/request.json b/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario13-Don't Pass CVV for save card flow and verify success payment/Payments - Create/request.json
index 1d85fee7356..fe4adccda47 100644
--- a/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario13-Don't Pass CVV for save card flow and verify success payment/Payments - Create/request.json	
+++ b/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario13-Don't Pass CVV for save card flow and verify success payment/Payments - Create/request.json	
@@ -33,6 +33,14 @@
       "authentication_type": "no_three_ds",
       "return_url": "https://duck.com",
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "online",
+        "accepted_at": "2022-09-10T10:11:12Z",
+        "online": {
+          "ip_address": "123.32.25.123",
+          "user_agent": "Mozilla/5.0 (Linux; Android 12; SM-S906N Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.119 Mobile Safari/537.36"
+        }
+      },
       "payment_method": "card",
       "payment_method_type": "credit",
       "payment_method_data": {
diff --git a/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario14-Save card payment with manual capture/Payments - Create/request.json b/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario14-Save card payment with manual capture/Payments - Create/request.json
index 73457bf3197..aaa993e4eef 100644
--- a/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario14-Save card payment with manual capture/Payments - Create/request.json	
+++ b/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario14-Save card payment with manual capture/Payments - Create/request.json	
@@ -33,6 +33,14 @@
       "authentication_type": "no_three_ds",
       "return_url": "https://duck.com",
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "online",
+        "accepted_at": "2022-09-10T10:11:12Z",
+        "online": {
+          "ip_address": "123.32.25.123",
+          "user_agent": "Mozilla/5.0 (Linux; Android 12; SM-S906N Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.119 Mobile Safari/537.36"
+        }
+      },
       "payment_method": "card",
       "payment_method_type": "credit",
       "payment_method_data": {
diff --git a/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario15-Create payment without customer_id and with billing address and shipping address/Payments - Create/request.json b/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario15-Create payment without customer_id and with billing address and shipping address/Payments - Create/request.json
index ffda1aef2d7..050f353af53 100644
--- a/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario15-Create payment without customer_id and with billing address and shipping address/Payments - Create/request.json	
+++ b/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario15-Create payment without customer_id and with billing address and shipping address/Payments - Create/request.json	
@@ -35,6 +35,14 @@
       "authentication_type": "no_three_ds",
       "return_url": "https://duck.com",
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "online",
+        "accepted_at": "2022-09-10T10:11:12Z",
+        "online": {
+          "ip_address": "123.32.25.123",
+          "user_agent": "Mozilla/5.0 (Linux; Android 12; SM-S906N Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.119 Mobile Safari/537.36"
+        }
+      },
       "payment_method": "card",
       "payment_method_type": "debit",
       "payment_method_data": {
diff --git a/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario8-Create a failure card payment with confirm true/Payments - Create/request.json b/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario8-Create a failure card payment with confirm true/Payments - Create/request.json
index 97cce7936c4..63d1eeba233 100644
--- a/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario8-Create a failure card payment with confirm true/Payments - Create/request.json	
+++ b/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario8-Create a failure card payment with confirm true/Payments - Create/request.json	
@@ -35,6 +35,14 @@
       "authentication_type": "no_three_ds",
       "return_url": "https://duck.com",
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "online",
+        "accepted_at": "2022-09-10T10:11:12Z",
+        "online": {
+          "ip_address": "123.32.25.123",
+          "user_agent": "Mozilla/5.0 (Linux; Android 12; SM-S906N Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.119 Mobile Safari/537.36"
+        }
+      },
       "payment_method": "card",
       "payment_method_type": "debit",
       "payment_method_data": {
diff --git a/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario9-Update amount with automatic capture/Payments - Confirm/request.json b/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario9-Update amount with automatic capture/Payments - Confirm/request.json
index 7b72495e5c4..962144d6bc6 100644
--- a/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario9-Update amount with automatic capture/Payments - Confirm/request.json	
+++ b/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario9-Update amount with automatic capture/Payments - Confirm/request.json	
@@ -29,7 +29,6 @@
       "key": "Accept",
       "value": "application/json"
     },
-    ,
     {
       "key": "publishable_key",
       "value": "",
@@ -58,6 +57,14 @@
         }
       },
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "online",
+        "accepted_at": "2022-09-10T10:11:12Z",
+        "online": {
+          "ip_address": "123.32.25.123",
+          "user_agent": "Mozilla/5.0 (Linux; Android 12; SM-S906N Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.119 Mobile Safari/537.36"
+        }
+      },
       "browser_info": {
         "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
         "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
diff --git a/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario9a-Update amount with manual capture/Payments - Confirm/request.json b/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario9a-Update amount with manual capture/Payments - Confirm/request.json
index 7b72495e5c4..962144d6bc6 100644
--- a/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario9a-Update amount with manual capture/Payments - Confirm/request.json	
+++ b/postman/collection-dir/nmi/Flow Testcases/Happy Cases/Scenario9a-Update amount with manual capture/Payments - Confirm/request.json	
@@ -29,7 +29,6 @@
       "key": "Accept",
       "value": "application/json"
     },
-    ,
     {
       "key": "publishable_key",
       "value": "",
@@ -58,6 +57,14 @@
         }
       },
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "online",
+        "accepted_at": "2022-09-10T10:11:12Z",
+        "online": {
+          "ip_address": "123.32.25.123",
+          "user_agent": "Mozilla/5.0 (Linux; Android 12; SM-S906N Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.119 Mobile Safari/537.36"
+        }
+      },
       "browser_info": {
         "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
         "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
diff --git a/postman/collection-dir/nmi/Flow Testcases/Variation Cases/Scenario9-Create a recurring payment with greater mandate amount Copy/Payments - Create/request.json b/postman/collection-dir/nmi/Flow Testcases/Variation Cases/Scenario9-Create a recurring payment with greater mandate amount Copy/Payments - Create/request.json
index 7aeaf601cc6..2cbfe4a20f1 100644
--- a/postman/collection-dir/nmi/Flow Testcases/Variation Cases/Scenario9-Create a recurring payment with greater mandate amount Copy/Payments - Create/request.json	
+++ b/postman/collection-dir/nmi/Flow Testcases/Variation Cases/Scenario9-Create a recurring payment with greater mandate amount Copy/Payments - Create/request.json	
@@ -59,6 +59,14 @@
           }
         }
       },
+      "customer_acceptance": {
+        "acceptance_type": "online",
+        "accepted_at": "2022-09-10T10:11:12Z",
+        "online": {
+          "ip_address": "123.32.25.123",
+          "user_agent": "Mozilla/5.0 (Linux; Android 12; SM-S906N Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.119 Mobile Safari/537.36"
+        }
+      },
       "billing": {
         "address": {
           "line1": "1467",
diff --git a/postman/collection-dir/paypal/Flow Testcases/Happy Cases/Scenario6-Create Wallet - Paypal/Payments - Create/request.json b/postman/collection-dir/paypal/Flow Testcases/Happy Cases/Scenario6-Create Wallet - Paypal/Payments - Create/request.json
index 824bfb49230..7201fa121be 100644
--- a/postman/collection-dir/paypal/Flow Testcases/Happy Cases/Scenario6-Create Wallet - Paypal/Payments - Create/request.json	
+++ b/postman/collection-dir/paypal/Flow Testcases/Happy Cases/Scenario6-Create Wallet - Paypal/Payments - Create/request.json	
@@ -33,6 +33,14 @@
       "authentication_type": "three_ds",
       "return_url": "https://duck.com",
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "online",
+        "accepted_at": "2022-09-10T10:11:12Z",
+        "online": {
+          "ip_address": "123.32.25.123",
+          "user_agent": "Mozilla/5.0 (Linux; Android 12; SM-S906N Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.119 Mobile Safari/537.36"
+        }
+      },
       "billing": {
         "address": {
           "line1": "1467",
diff --git a/postman/collection-dir/paypal/Flow Testcases/Happy Cases/Scenario7-Create Wallet - Paypal with confrm false/Payments - Confirm/request.json b/postman/collection-dir/paypal/Flow Testcases/Happy Cases/Scenario7-Create Wallet - Paypal with confrm false/Payments - Confirm/request.json
index efa17534b1d..f5da408b2f3 100644
--- a/postman/collection-dir/paypal/Flow Testcases/Happy Cases/Scenario7-Create Wallet - Paypal with confrm false/Payments - Confirm/request.json	
+++ b/postman/collection-dir/paypal/Flow Testcases/Happy Cases/Scenario7-Create Wallet - Paypal with confrm false/Payments - Confirm/request.json	
@@ -45,6 +45,14 @@
         "wallet": {
           "paypal_redirect": {}
         }
+      },
+      "customer_acceptance": {
+        "acceptance_type": "online",
+        "accepted_at": "2022-09-10T10:11:12Z",
+        "online": {
+          "ip_address": "123.32.25.123",
+          "user_agent": "Mozilla/5.0 (Linux; Android 12; SM-S906N Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.119 Mobile Safari/537.36"
+        }
       }
     }
   },
diff --git a/postman/collection-dir/shift4/Flow Testcases/Variation Cases/Scenario9-Create a recurring payment with greater mandate amount/Payments - Create/request.json b/postman/collection-dir/shift4/Flow Testcases/Variation Cases/Scenario9-Create a recurring payment with greater mandate amount/Payments - Create/request.json
index 57d625e7c39..fbbd60339e9 100644
--- a/postman/collection-dir/shift4/Flow Testcases/Variation Cases/Scenario9-Create a recurring payment with greater mandate amount/Payments - Create/request.json	
+++ b/postman/collection-dir/shift4/Flow Testcases/Variation Cases/Scenario9-Create a recurring payment with greater mandate amount/Payments - Create/request.json	
@@ -59,6 +59,14 @@
           }
         }
       },
+      "customer_acceptance": {
+        "acceptance_type": "online",
+        "accepted_at": "2022-09-10T10:11:12Z",
+        "online": {
+          "ip_address": "123.32.25.123",
+          "user_agent": "Mozilla/5.0 (Linux; Android 12; SM-S906N Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.119 Mobile Safari/537.36"
+        }
+      },
       "billing": {
         "address": {
           "line1": "1467",
diff --git a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario1-Create payment with confirm true/Payments - Create/request.json b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario1-Create payment with confirm true/Payments - Create/request.json
index 93bcc23194f..9d0fac32c1f 100644
--- a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario1-Create payment with confirm true/Payments - Create/request.json	
+++ b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario1-Create payment with confirm true/Payments - Create/request.json	
@@ -35,6 +35,14 @@
       "authentication_type": "no_three_ds",
       "return_url": "https://duck.com",
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "online",
+        "accepted_at": "2022-09-10T10:11:12Z",
+        "online": {
+          "ip_address": "123.32.25.123",
+          "user_agent": "Mozilla/5.0 (Linux; Android 12; SM-S906N Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.119 Mobile Safari/537.36"
+        }
+      },
       "payment_method": "card",
       "payment_method_type": "debit",
       "payment_method_data": {
diff --git a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario10-Create a mandate and recurring payment/Payments - Create/request.json b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario10-Create a mandate and recurring payment/Payments - Create/request.json
index 3ffbe03a605..b5ef6b1afe2 100644
--- a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario10-Create a mandate and recurring payment/Payments - Create/request.json	
+++ b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario10-Create a mandate and recurring payment/Payments - Create/request.json	
@@ -59,6 +59,14 @@
           }
         }
       },
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "billing": {
         "address": {
           "line1": "1467",
@@ -98,12 +106,8 @@
   },
   "url": {
     "raw": "{{baseUrl}}/payments",
-    "host": [
-      "{{baseUrl}}"
-    ],
-    "path": [
-      "payments"
-    ]
+    "host": ["{{baseUrl}}"],
+    "path": ["payments"]
   },
   "description": "To process a payment you will have to create a payment, attach a payment method and confirm. Depending on the user journey you wish to achieve, you may opt to all the steps in a single request or in a sequence of API request using following APIs: (i) Payments - Update, (ii) Payments - Confirm, and (iii) Payments - Capture"
 }
diff --git a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario11-Refund recurring payment/Payments - Create/request.json b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario11-Refund recurring payment/Payments - Create/request.json
index 9df18b5e886..61f007ede68 100644
--- a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario11-Refund recurring payment/Payments - Create/request.json	
+++ b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario11-Refund recurring payment/Payments - Create/request.json	
@@ -59,6 +59,14 @@
           }
         }
       },
+      "customer_acceptance": {
+        "acceptance_type": "online",
+        "accepted_at": "2022-09-10T10:11:12Z",
+        "online": {
+          "ip_address": "123.32.25.123",
+          "user_agent": "Mozilla/5.0 (Linux; Android 12; SM-S906N Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.119 Mobile Safari/537.36"
+        }
+      },
       "shipping": {
         "address": {
           "line1": "1467",
@@ -86,12 +94,8 @@
   },
   "url": {
     "raw": "{{baseUrl}}/payments",
-    "host": [
-      "{{baseUrl}}"
-    ],
-    "path": [
-      "payments"
-    ]
+    "host": ["{{baseUrl}}"],
+    "path": ["payments"]
   },
   "description": "To process a payment you will have to create a payment, attach a payment method and confirm. Depending on the user journey you wish to achieve, you may opt to all the steps in a single request or in a sequence of API request using following APIs: (i) Payments - Update, (ii) Payments - Confirm, and (iii) Payments - Capture"
 }
diff --git a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario20-Bank Debit-ach/Payments - Create/request.json b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario20-Bank Debit-ach/Payments - Create/request.json
index eda0801c9cc..78d949505f4 100644
--- a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario20-Bank Debit-ach/Payments - Create/request.json	
+++ b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario20-Bank Debit-ach/Payments - Create/request.json	
@@ -23,9 +23,7 @@
       "confirm": true,
       "business_label": "default",
       "capture_method": "automatic",
-      "connector": [
-        "stripe"
-      ],
+      "connector": ["stripe"],
       "customer_id": "klarna",
       "capture_on": "2022-09-10T10:11:12Z",
       "authentication_type": "three_ds",
@@ -55,6 +53,14 @@
           }
         }
       },
+      "customer_acceptance": {
+        "acceptance_type": "online",
+        "accepted_at": "2022-09-10T10:11:12Z",
+        "online": {
+          "ip_address": "123.32.25.123",
+          "user_agent": "Mozilla/5.0 (Linux; Android 12; SM-S906N Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.119 Mobile Safari/537.36"
+        }
+      },
       "payment_method": "bank_debit",
       "payment_method_type": "ach",
       "payment_method_data": {
@@ -85,12 +91,8 @@
   },
   "url": {
     "raw": "{{baseUrl}}/payments",
-    "host": [
-      "{{baseUrl}}"
-    ],
-    "path": [
-      "payments"
-    ]
+    "host": ["{{baseUrl}}"],
+    "path": ["payments"]
   },
   "description": "To process a payment you will have to create a payment, attach a payment method and confirm. Depending on the user journey you wish to achieve, you may opt to all the steps in a single request or in a sequence of API request using following APIs: (i) Payments - Update, (ii) Payments - Confirm, and (iii) Payments - Capture"
 }
diff --git a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario22- Update address and List Payment method/Payments - Confirm/request.json b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario22- Update address and List Payment method/Payments - Confirm/request.json
index 20b99223ac4..43515f184b5 100644
--- a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario22- Update address and List Payment method/Payments - Confirm/request.json	
+++ b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario22- Update address and List Payment method/Payments - Confirm/request.json	
@@ -52,6 +52,7 @@
           }
         }
       },
+      "setup_future_usage": "off_session",
       "mandate_data": {
         "customer_acceptance": {
           "acceptance_type": "offline",
@@ -73,7 +74,14 @@
           }
         }
       },
-      "setup_future_usage": "off_session",
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "browser_info": {
         "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
         "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
@@ -90,14 +98,8 @@
   },
   "url": {
     "raw": "{{baseUrl}}/payments/:id/confirm",
-    "host": [
-      "{{baseUrl}}"
-    ],
-    "path": [
-      "payments",
-      ":id",
-      "confirm"
-    ],
+    "host": ["{{baseUrl}}"],
+    "path": ["payments", ":id", "confirm"],
     "variable": [
       {
         "key": "id",
diff --git a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario22- Update address and List Payment method/Payments - Create/request.json b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario22- Update address and List Payment method/Payments - Create/request.json
index 785122a83c5..beeb5b3983f 100644
--- a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario22- Update address and List Payment method/Payments - Create/request.json	
+++ b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario22- Update address and List Payment method/Payments - Create/request.json	
@@ -71,12 +71,8 @@
   },
   "url": {
     "raw": "{{baseUrl}}/payments",
-    "host": [
-      "{{baseUrl}}"
-    ],
-    "path": [
-      "payments"
-    ]
+    "host": ["{{baseUrl}}"],
+    "path": ["payments"]
   },
   "description": "To process a payment you will have to create a payment, attach a payment method and confirm. Depending on the user journey you wish to achieve, you may opt to all the steps in a single request or in a sequence of API request using following APIs: (i) Payments - Update, (ii) Payments - Confirm, and (iii) Payments - Capture"
 }
diff --git a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario23- Update Amount/Payments - Confirm/request.json b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario23- Update Amount/Payments - Confirm/request.json
index 5a51941cf64..1b1757b9a49 100644
--- a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario23- Update Amount/Payments - Confirm/request.json	
+++ b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario23- Update Amount/Payments - Confirm/request.json	
@@ -29,7 +29,6 @@
       "key": "Accept",
       "value": "application/json"
     },
-    ,
     {
       "key": "publishable_key",
       "value": "",
@@ -58,6 +57,14 @@
         }
       },
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "browser_info": {
         "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
         "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
diff --git a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario24-Add card flow/Payments - Create/request.json b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario24-Add card flow/Payments - Create/request.json
index 2019bae8790..2ac0cacfb99 100644
--- a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario24-Add card flow/Payments - Create/request.json	
+++ b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario24-Add card flow/Payments - Create/request.json	
@@ -33,6 +33,14 @@
       "authentication_type": "no_three_ds",
       "return_url": "https://google.com",
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "payment_method": "card",
       "payment_method_type": "credit",
       "payment_method_data": {
@@ -93,12 +101,8 @@
   },
   "url": {
     "raw": "{{baseUrl}}/payments",
-    "host": [
-      "{{baseUrl}}"
-    ],
-    "path": [
-      "payments"
-    ]
+    "host": ["{{baseUrl}}"],
+    "path": ["payments"]
   },
   "description": "To process a payment you will have to create a payment, attach a payment method and confirm. Depending on the user journey you wish to achieve, you may opt to all the steps in a single request or in a sequence of API request using following APIs: (i) Payments - Update, (ii) Payments - Confirm, and (iii) Payments - Capture"
 }
diff --git a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario25-Don't Pass CVV for save card flow and verifysuccess payment/Payments - Create/request.json b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario25-Don't Pass CVV for save card flow and verifysuccess payment/Payments - Create/request.json
index 4f02f7b6809..150106cfded 100644
--- a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario25-Don't Pass CVV for save card flow and verifysuccess payment/Payments - Create/request.json	
+++ b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario25-Don't Pass CVV for save card flow and verifysuccess payment/Payments - Create/request.json	
@@ -33,6 +33,14 @@
       "authentication_type": "no_three_ds",
       "return_url": "https://google.com",
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "payment_method": "card",
       "payment_method_type": "credit",
       "payment_method_data": {
@@ -93,12 +101,8 @@
   },
   "url": {
     "raw": "{{baseUrl}}/payments",
-    "host": [
-      "{{baseUrl}}"
-    ],
-    "path": [
-      "payments"
-    ]
+    "host": ["{{baseUrl}}"],
+    "path": ["payments"]
   },
   "description": "To process a payment you will have to create a payment, attach a payment method and confirm. Depending on the user journey you wish to achieve, you may opt to all the steps in a single request or in a sequence of API request using following APIs: (i) Payments - Update, (ii) Payments - Confirm, and (iii) Payments - Capture"
 }
diff --git a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario26-Save card payment with manual capture/Payments - Create/request.json b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario26-Save card payment with manual capture/Payments - Create/request.json
index 988bc4b800b..d73166871cd 100644
--- a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario26-Save card payment with manual capture/Payments - Create/request.json	
+++ b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario26-Save card payment with manual capture/Payments - Create/request.json	
@@ -33,6 +33,14 @@
       "authentication_type": "no_three_ds",
       "return_url": "https://google.com",
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "payment_method": "card",
       "payment_method_type": "credit",
       "payment_method_data": {
@@ -93,12 +101,8 @@
   },
   "url": {
     "raw": "{{baseUrl}}/payments",
-    "host": [
-      "{{baseUrl}}"
-    ],
-    "path": [
-      "payments"
-    ]
+    "host": ["{{baseUrl}}"],
+    "path": ["payments"]
   },
   "description": "To process a payment you will have to create a payment, attach a payment method and confirm. Depending on the user journey you wish to achieve, you may opt to all the steps in a single request or in a sequence of API request using following APIs: (i) Payments - Update, (ii) Payments - Confirm, and (iii) Payments - Capture"
 }
diff --git a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario27-Create payment without customer_id and with billing address and shipping address/Payments - Create/request.json b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario27-Create payment without customer_id and with billing address and shipping address/Payments - Create/request.json
index 60e56bb581c..6a9836d232c 100644
--- a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario27-Create payment without customer_id and with billing address and shipping address/Payments - Create/request.json	
+++ b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario27-Create payment without customer_id and with billing address and shipping address/Payments - Create/request.json	
@@ -35,6 +35,14 @@
       "authentication_type": "no_three_ds",
       "return_url": "https://duck.com",
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "payment_method": "card",
       "payment_method_type": "debit",
       "payment_method_data": {
@@ -87,12 +95,8 @@
   },
   "url": {
     "raw": "{{baseUrl}}/payments",
-    "host": [
-      "{{baseUrl}}"
-    ],
-    "path": [
-      "payments"
-    ]
+    "host": ["{{baseUrl}}"],
+    "path": ["payments"]
   },
   "description": "To process a payment you will have to create a payment, attach a payment method and confirm. Depending on the user journey you wish to achieve, you may opt to all the steps in a single request or in a sequence of API request using following APIs: (i) Payments - Update, (ii) Payments - Confirm, and (iii) Payments - Capture"
 }
diff --git a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario28-Confirm a payment with requires_customer_action status/Payments - Create with confirm true/request.json b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario28-Confirm a payment with requires_customer_action status/Payments - Create with confirm true/request.json
index d14ae6582c8..7e28058ccf6 100644
--- a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario28-Confirm a payment with requires_customer_action status/Payments - Create with confirm true/request.json	
+++ b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario28-Confirm a payment with requires_customer_action status/Payments - Create with confirm true/request.json	
@@ -35,6 +35,14 @@
       "authentication_type": "three_ds",
       "return_url": "https://duck.com",
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "payment_method": "card",
       "payment_method_data": {
         "card": {
diff --git a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario6-Create 3DS payment/Payments - Create/request.json b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario6-Create 3DS payment/Payments - Create/request.json
index d14ae6582c8..7e28058ccf6 100644
--- a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario6-Create 3DS payment/Payments - Create/request.json	
+++ b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario6-Create 3DS payment/Payments - Create/request.json	
@@ -35,6 +35,14 @@
       "authentication_type": "three_ds",
       "return_url": "https://duck.com",
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "payment_method": "card",
       "payment_method_data": {
         "card": {
diff --git a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario8-Create a failure card payment with confirm true/Payments - Create/request.json b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario8-Create a failure card payment with confirm true/Payments - Create/request.json
index 6d1bc5e0a0d..a3e0f52b8d7 100644
--- a/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario8-Create a failure card payment with confirm true/Payments - Create/request.json	
+++ b/postman/collection-dir/stripe/Flow Testcases/Happy Cases/Scenario8-Create a failure card payment with confirm true/Payments - Create/request.json	
@@ -35,6 +35,14 @@
       "authentication_type": "no_three_ds",
       "return_url": "https://duck.com",
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "payment_method": "card",
       "payment_method_type": "debit",
       "payment_method_data": {
@@ -87,12 +95,8 @@
   },
   "url": {
     "raw": "{{baseUrl}}/payments",
-    "host": [
-      "{{baseUrl}}"
-    ],
-    "path": [
-      "payments"
-    ]
+    "host": ["{{baseUrl}}"],
+    "path": ["payments"]
   },
   "description": "To process a payment you will have to create a payment, attach a payment method and confirm. Depending on the user journey you wish to achieve, you may opt to all the steps in a single request or in a sequence of API request using following APIs: (i) Payments - Update, (ii) Payments - Confirm, and (iii) Payments - Capture"
 }
diff --git a/postman/collection-dir/stripe/Flow Testcases/Variation Cases/Scenario9-Create a recurring payment with greater mandate amount/Payments - Create/request.json b/postman/collection-dir/stripe/Flow Testcases/Variation Cases/Scenario9-Create a recurring payment with greater mandate amount/Payments - Create/request.json
index a5c9391cf74..b5ef6b1afe2 100644
--- a/postman/collection-dir/stripe/Flow Testcases/Variation Cases/Scenario9-Create a recurring payment with greater mandate amount/Payments - Create/request.json	
+++ b/postman/collection-dir/stripe/Flow Testcases/Variation Cases/Scenario9-Create a recurring payment with greater mandate amount/Payments - Create/request.json	
@@ -59,6 +59,14 @@
           }
         }
       },
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "billing": {
         "address": {
           "line1": "1467",
diff --git a/postman/collection-dir/stripe/PaymentMethods/Payments - Create/request.json b/postman/collection-dir/stripe/PaymentMethods/Payments - Create/request.json
index ac22dac750c..cc330f3c8f7 100644
--- a/postman/collection-dir/stripe/PaymentMethods/Payments - Create/request.json	
+++ b/postman/collection-dir/stripe/PaymentMethods/Payments - Create/request.json	
@@ -33,6 +33,14 @@
       "authentication_type": "no_three_ds",
       "return_url": "https://duck.com",
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "payment_method": "card",
       "payment_method_type": "debit",
       "payment_method_data": {
diff --git a/postman/collection-dir/zen/Flow Testcases/Happy Cases/Scenario1-Create payment with confirm true/Payments - Create/request.json b/postman/collection-dir/zen/Flow Testcases/Happy Cases/Scenario1-Create payment with confirm true/Payments - Create/request.json
index 7afc6d61c49..fd84bcaadb5 100644
--- a/postman/collection-dir/zen/Flow Testcases/Happy Cases/Scenario1-Create payment with confirm true/Payments - Create/request.json	
+++ b/postman/collection-dir/zen/Flow Testcases/Happy Cases/Scenario1-Create payment with confirm true/Payments - Create/request.json	
@@ -32,6 +32,14 @@
       "authentication_type": "no_three_ds",
       "return_url": "https://duck.com",
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "billing": {
         "address": {
           "line1": "1467",
diff --git a/postman/collection-dir/zen/Flow Testcases/Happy Cases/Scenario2-Create payment with confirm false/Payments - Confirm/request.json b/postman/collection-dir/zen/Flow Testcases/Happy Cases/Scenario2-Create payment with confirm false/Payments - Confirm/request.json
index 778f8872687..2f295eba3a8 100644
--- a/postman/collection-dir/zen/Flow Testcases/Happy Cases/Scenario2-Create payment with confirm false/Payments - Confirm/request.json	
+++ b/postman/collection-dir/zen/Flow Testcases/Happy Cases/Scenario2-Create payment with confirm false/Payments - Confirm/request.json	
@@ -51,6 +51,14 @@
         "java_script_enabled": true,
         "ip_address": "127.0.0.1"
       },
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "order_details": [
         {
           "amount": 6540,
@@ -60,6 +68,7 @@
       ]
     }
   },
+
   "url": {
     "raw": "{{baseUrl}}/payments/:id/confirm",
     "host": ["{{baseUrl}}"],
diff --git a/postman/collection-dir/zen/Flow Testcases/Happy Cases/Scenario3-Create payment without PMD/Payments - Create/request.json b/postman/collection-dir/zen/Flow Testcases/Happy Cases/Scenario3-Create payment without PMD/Payments - Create/request.json
index a6aef6ecb71..042a4bc1f73 100644
--- a/postman/collection-dir/zen/Flow Testcases/Happy Cases/Scenario3-Create payment without PMD/Payments - Create/request.json	
+++ b/postman/collection-dir/zen/Flow Testcases/Happy Cases/Scenario3-Create payment without PMD/Payments - Create/request.json	
@@ -32,6 +32,14 @@
       "authentication_type": "no_three_ds",
       "return_url": "https://duck.com",
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "billing": {
         "address": {
           "line1": "1467",
diff --git a/postman/collection-dir/zen/Flow Testcases/Happy Cases/Scenario4-Create 3DS payment/Payments - Create/request.json b/postman/collection-dir/zen/Flow Testcases/Happy Cases/Scenario4-Create 3DS payment/Payments - Create/request.json
index ee354325323..bed15211eea 100644
--- a/postman/collection-dir/zen/Flow Testcases/Happy Cases/Scenario4-Create 3DS payment/Payments - Create/request.json	
+++ b/postman/collection-dir/zen/Flow Testcases/Happy Cases/Scenario4-Create 3DS payment/Payments - Create/request.json	
@@ -32,6 +32,14 @@
       "authentication_type": "no_three_ds",
       "return_url": "https://duck.com",
       "setup_future_usage": "off_session",
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "order_details": [
         {
           "amount": 6540,
diff --git a/postman/collection-dir/zen/Flow Testcases/Happy Cases/Scenario5-Create 3DS payment with confrm false/Payments - Create/request.json b/postman/collection-dir/zen/Flow Testcases/Happy Cases/Scenario5-Create 3DS payment with confrm false/Payments - Create/request.json
index 01fa4013653..91a932b12d9 100644
--- a/postman/collection-dir/zen/Flow Testcases/Happy Cases/Scenario5-Create 3DS payment with confrm false/Payments - Create/request.json	
+++ b/postman/collection-dir/zen/Flow Testcases/Happy Cases/Scenario5-Create 3DS payment with confrm false/Payments - Create/request.json	
@@ -32,6 +32,14 @@
       "authentication_type": "no_three_ds",
       "return_url": "https://duck.com",
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "billing": {
         "address": {
           "line1": "1467",
diff --git a/postman/collection-dir/zen/Flow Testcases/QuickStart/Payments - Create/request.json b/postman/collection-dir/zen/Flow Testcases/QuickStart/Payments - Create/request.json
index ee354325323..aa51751ae1e 100644
--- a/postman/collection-dir/zen/Flow Testcases/QuickStart/Payments - Create/request.json	
+++ b/postman/collection-dir/zen/Flow Testcases/QuickStart/Payments - Create/request.json	
@@ -31,7 +31,15 @@
       "description": "Its my first payment request",
       "authentication_type": "no_three_ds",
       "return_url": "https://duck.com",
-      "setup_future_usage": "off_session",
+      "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "order_details": [
         {
           "amount": 6540,
diff --git a/postman/collection-dir/zen/Flow Testcases/Variation Cases/Scenario2-Confirming the payment without PMD/Payments - Create/request.json b/postman/collection-dir/zen/Flow Testcases/Variation Cases/Scenario2-Confirming the payment without PMD/Payments - Create/request.json
index a6aef6ecb71..042a4bc1f73 100644
--- a/postman/collection-dir/zen/Flow Testcases/Variation Cases/Scenario2-Confirming the payment without PMD/Payments - Create/request.json	
+++ b/postman/collection-dir/zen/Flow Testcases/Variation Cases/Scenario2-Confirming the payment without PMD/Payments - Create/request.json	
@@ -32,6 +32,14 @@
       "authentication_type": "no_three_ds",
       "return_url": "https://duck.com",
       "setup_future_usage": "on_session",
+      "customer_acceptance": {
+        "acceptance_type": "offline",
+        "accepted_at": "1963-05-03T04:07:52.723Z",
+        "online": {
+          "ip_address": "127.0.0.1",
+          "user_agent": "amet irure esse"
+        }
+      },
       "billing": {
         "address": {
           "line1": "1467",

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

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

## Description

store customer_acceptance in the payment_methods table and some changes to setup_future_usage

- setup_future_usage should be inferred from the create and if passed in confirm should override the one in create
- If customer_acceptance is passed then only the card will be saved on hyper switch's end


### Additional Changes

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

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

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


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

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


## How did you test it?
 

-make a on_session payment without customer_acceptance, card will not be saved
-> Create
```
curl --location 'http://localhost:8080/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_O7Znp5PhvGpSeE22Hxn4K8snHW6ObRfbA8R1isvLhUXpJRGHOINvlGufM4mGDAqj' \
--data-raw ' {"amount": 6677,
    "currency": "USD",
    "confirm": false,
    "capture_method": "automatic",
    "authentication_type": "no_three_ds",
    "customer_id": "97cc",
    "email": "something@gmail.com",
    "shipping": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "US",
            "first_name": "joseph",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        }
    },
    "billing": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "US",
            "first_name": "joseph",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        }
    },
    "metadata": {
        "order_details": {
            "product_name": "Apple iphone 15",
            "quantity": 1
        }
    },
    "business_country": "US",
    "business_label": "default",
"setup_future_usage": "on_session"
            
}'
```
-> Confirm
```
curl --location 'http://localhost:8080/payments/pay_IHI92Rlo3i6kwihECXVr/confirm' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_O7Znp5PhvGpSeE22Hxn4K8snHW6ObRfbA8R1isvLhUXpJRGHOINvlGufM4mGDAqj' \
--data '{
    "confirm": true,
      "payment_type": "normal",
    "payment_method": "card",

    "payment_method_type": "debit",
    "payment_method_data": {
        "card": {
            
      
            

            
       "card_number":"4242424242424242",
            "card_exp_month": "11",
            "card_exp_year": "2040",
            "card_holder_name": "AKA",
            "card_cvc": "123",
            "nick_name": "HELO"
        }
    }
}'
```
![Screenshot 2024-03-05 at 1 47 56 PM](https://github.com/juspay/hyperswitch/assets/55580080/334f668c-fcd2-4b89-b31b-a5992865f1f4)

-make a off_session payment  without mandate_type ,i.e., MIT with customer_acceptance, the card will be saved on our end 
-> Create 
```
curl --location 'http://localhost:8080/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_O7Znp5PhvGpSeE22Hxn4K8snHW6ObRfbA8R1isvLhUXpJRGHOINvlGufM4mGDAqj' \
--data-raw ' {"amount":0,
    "currency": "USD",
    "confirm": false,
    "capture_method": "automatic",
    "authentication_type": "no_three_ds",
    "customer_id": "q7cc",
    "email": "something@gmail.com",
    "shipping": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "US",
            "first_name": "joseph",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        }
    },
    "billing": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "US",
            "first_name": "joseph",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        }
    },
    "metadata": {
        "order_details": {
            "product_name": "Apple iphone 15",
            "quantity": 1
        }
    },
    "business_country": "US",
    "business_label": "default",
"setup_future_usage": "off_session"    
}'
```
-> Confirm

```
curl --location 'http://localhost:8080/payments/pay_IHI92Rlo3i6kwihECXVr/confirm' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_O7Znp5PhvGpSeE22Hxn4K8snHW6ObRfbA8R1isvLhUXpJRGHOINvlGufM4mGDAqj' \
--data '{
    "confirm": true,
      "payment_type": "setup_mandate",
        
      "customer_acceptance": {
            "acceptance_type": "offline",
            "accepted_at": "1963-05-03T04:07:52.723Z",
            "online": {
                "ip_address": "in sit",
                "user_agent": "amet irure esse"
            }},

    "payment_method": "card",

    "payment_method_type": "debit",
    "payment_method_data": {
        "card": {
            
 
       "card_number":"4242424242424242",
            "card_exp_month": "11",
            "card_exp_year": "2040",
            "card_holder_name": "AKA",
            "card_cvc": "123",
            "nick_name": "HELO"
        }
    }
}'
```
![Screenshot 2024-03-05 at 1 45 30 PM](https://github.com/juspay/hyperswitch/assets/55580080/b7826fc2-08c7-4d82-84c8-f5bee65c7fef)

<img width="1720" alt="Screenshot 2024-03-05 at 1 46 40 PM" src="https://github.com/juspay/hyperswitch/assets/55580080/ab269405-fa54-45d9-a1a3-f9135d94f839">


-to save the card both, customer_acceptance and setup_future_usage must be passed

- if its a mandate_payment , we can have off_session in create with mandate type and customer_acceptance in confirm and also we can have customer_acceptance inside the mandate_data field which is for backwards compatibility currently there in mandate_data


## 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`
- [ ] I reviewed the submitted code
- [ ] I added unit tests for my changes where possible
- [ ] I added a [CHANGELOG](/CHANGELOG.md) entry if applicable
