Bug: [ENHANCEMENT] expose configurations from payment links



SDK has below functionalities which needs to be exposed as payment link configs

1. `labels`, possible values - floating, above, never
2. `paymentMethodsHeaderText` - for an optional text to be displayed above the payment form
3. `terms.cards`, possible values - auto, always, never
diff --git a/api-reference-v2/openapi_spec.json b/api-reference-v2/openapi_spec.json
index 61cf7b26ac3..12e5308cbd4 100644
--- a/api-reference-v2/openapi_spec.json
+++ b/api-reference-v2/openapi_spec.json
@@ -14798,6 +14798,27 @@
           "enable_button_only_on_form_ready": {
             "type": "boolean",
             "description": "Flag to enable the button only when the payment form is ready for submission"
+          },
+          "payment_form_header_text": {
+            "type": "string",
+            "description": "Optional header for the SDK's payment form",
+            "nullable": true
+          },
+          "payment_form_label_type": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/PaymentLinkSdkLabelType"
+              }
+            ],
+            "nullable": true
+          },
+          "show_card_terms": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/PaymentLinkShowSdkTerms"
+              }
+            ],
+            "nullable": true
           }
         }
       },
@@ -14940,6 +14961,27 @@
             "type": "boolean",
             "description": "Flag to enable the button only when the payment form is ready for submission",
             "nullable": true
+          },
+          "payment_form_header_text": {
+            "type": "string",
+            "description": "Optional header for the SDK's payment form",
+            "nullable": true
+          },
+          "payment_form_label_type": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/PaymentLinkSdkLabelType"
+              }
+            ],
+            "nullable": true
+          },
+          "show_card_terms": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/PaymentLinkShowSdkTerms"
+              }
+            ],
+            "nullable": true
           }
         }
       },
@@ -14987,6 +15029,22 @@
           }
         }
       },
+      "PaymentLinkSdkLabelType": {
+        "type": "string",
+        "enum": [
+          "above",
+          "floating",
+          "never"
+        ]
+      },
+      "PaymentLinkShowSdkTerms": {
+        "type": "string",
+        "enum": [
+          "always",
+          "auto",
+          "never"
+        ]
+      },
       "PaymentLinkStatus": {
         "type": "string",
         "description": "Status Of the Payment Link",
diff --git a/crates/api_models/src/admin.rs b/crates/api_models/src/admin.rs
index 5d3f7c5dc8f..a9a8525f65b 100644
--- a/crates/api_models/src/admin.rs
+++ b/crates/api_models/src/admin.rs
@@ -2892,6 +2892,14 @@ pub struct PaymentLinkConfigRequest {
     pub payment_link_ui_rules: Option<HashMap<String, HashMap<String, String>>>,
     /// Flag to enable the button only when the payment form is ready for submission
     pub enable_button_only_on_form_ready: Option<bool>,
+    /// Optional header for the SDK's payment form
+    pub payment_form_header_text: Option<String>,
+    /// Label type in the SDK's payment form
+    #[schema(value_type = Option<PaymentLinkSdkLabelType>, example = "floating")]
+    pub payment_form_label_type: Option<api_enums::PaymentLinkSdkLabelType>,
+    /// Boolean for controlling whether or not to show the explicit consent for storing cards
+    #[schema(value_type = Option<PaymentLinkShowSdkTerms>, example = "always")]
+    pub show_card_terms: Option<api_enums::PaymentLinkShowSdkTerms>,
 }
 
 #[derive(Clone, Debug, serde::Deserialize, serde::Serialize, PartialEq, ToSchema)]
@@ -2979,6 +2987,14 @@ pub struct PaymentLinkConfig {
     pub payment_link_ui_rules: Option<HashMap<String, HashMap<String, String>>>,
     /// Flag to enable the button only when the payment form is ready for submission
     pub enable_button_only_on_form_ready: bool,
+    /// Optional header for the SDK's payment form
+    pub payment_form_header_text: Option<String>,
+    /// Label type in the SDK's payment form
+    #[schema(value_type = Option<PaymentLinkSdkLabelType>, example = "floating")]
+    pub payment_form_label_type: Option<api_enums::PaymentLinkSdkLabelType>,
+    /// Boolean for controlling whether or not to show the explicit consent for storing cards
+    #[schema(value_type = Option<PaymentLinkShowSdkTerms>, example = "always")]
+    pub show_card_terms: Option<api_enums::PaymentLinkShowSdkTerms>,
 }
 
 #[derive(Debug, Clone, serde::Serialize, serde::Deserialize, PartialEq, Eq)]
diff --git a/crates/api_models/src/payments.rs b/crates/api_models/src/payments.rs
index 859dba9b59a..61efe59c66b 100644
--- a/crates/api_models/src/payments.rs
+++ b/crates/api_models/src/payments.rs
@@ -8023,6 +8023,9 @@ pub struct PaymentLinkDetails {
     pub payment_link_ui_rules: Option<HashMap<String, HashMap<String, String>>>,
     pub status: api_enums::IntentStatus,
     pub enable_button_only_on_form_ready: bool,
+    pub payment_form_header_text: Option<String>,
+    pub payment_form_label_type: Option<api_enums::PaymentLinkSdkLabelType>,
+    pub show_card_terms: Option<api_enums::PaymentLinkShowSdkTerms>,
 }
 
 #[derive(Debug, serde::Serialize, Clone)]
@@ -8041,6 +8044,9 @@ pub struct SecurePaymentLinkDetails {
     pub sdk_ui_rules: Option<HashMap<String, HashMap<String, String>>>,
     pub payment_link_ui_rules: Option<HashMap<String, HashMap<String, String>>>,
     pub enable_button_only_on_form_ready: bool,
+    pub payment_form_header_text: Option<String>,
+    pub payment_form_label_type: Option<api_enums::PaymentLinkSdkLabelType>,
+    pub show_card_terms: Option<api_enums::PaymentLinkShowSdkTerms>,
 }
 
 #[derive(Debug, serde::Serialize)]
diff --git a/crates/common_enums/src/enums/ui.rs b/crates/common_enums/src/enums/ui.rs
index aec6c7ed64a..eaa63e89e39 100644
--- a/crates/common_enums/src/enums/ui.rs
+++ b/crates/common_enums/src/enums/ui.rs
@@ -90,6 +90,54 @@ pub enum PaymentLinkDetailsLayout {
     Layout2,
 }
 
+#[derive(
+    Clone,
+    Copy,
+    Debug,
+    Default,
+    Eq,
+    Hash,
+    PartialEq,
+    Serialize,
+    Deserialize,
+    strum::Display,
+    strum::EnumString,
+    ToSchema,
+)]
+#[router_derive::diesel_enum(storage_type = "db_enum")]
+#[serde(rename_all = "lowercase")]
+#[strum(serialize_all = "lowercase")]
+pub enum PaymentLinkSdkLabelType {
+    #[default]
+    Above,
+    Floating,
+    Never,
+}
+
+#[derive(
+    Clone,
+    Copy,
+    Debug,
+    Default,
+    Eq,
+    Hash,
+    PartialEq,
+    Serialize,
+    Deserialize,
+    strum::Display,
+    strum::EnumString,
+    ToSchema,
+)]
+#[router_derive::diesel_enum(storage_type = "db_enum")]
+#[serde(rename_all = "lowercase")]
+#[strum(serialize_all = "lowercase")]
+pub enum PaymentLinkShowSdkTerms {
+    Always,
+    #[default]
+    Auto,
+    Never,
+}
+
 impl<'de> Deserialize<'de> for ElementSize {
     fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
     where
diff --git a/crates/diesel_models/src/business_profile.rs b/crates/diesel_models/src/business_profile.rs
index 94da0f0438b..07ca6cb46dc 100644
--- a/crates/diesel_models/src/business_profile.rs
+++ b/crates/diesel_models/src/business_profile.rs
@@ -681,6 +681,9 @@ pub struct PaymentLinkConfigRequest {
     pub sdk_ui_rules: Option<HashMap<String, HashMap<String, String>>>,
     pub payment_link_ui_rules: Option<HashMap<String, HashMap<String, String>>>,
     pub enable_button_only_on_form_ready: Option<bool>,
+    pub payment_form_header_text: Option<String>,
+    pub payment_form_label_type: Option<common_enums::PaymentLinkSdkLabelType>,
+    pub show_card_terms: Option<common_enums::PaymentLinkShowSdkTerms>,
 }
 
 #[derive(Clone, Debug, serde::Deserialize, serde::Serialize, PartialEq)]
diff --git a/crates/diesel_models/src/payment_intent.rs b/crates/diesel_models/src/payment_intent.rs
index 445cc6eab3c..634626a4b1f 100644
--- a/crates/diesel_models/src/payment_intent.rs
+++ b/crates/diesel_models/src/payment_intent.rs
@@ -196,6 +196,12 @@ pub struct PaymentLinkConfigRequestForPayments {
         Option<std::collections::HashMap<String, std::collections::HashMap<String, String>>>,
     /// Flag to enable the button only when the payment form is ready for submission
     pub enable_button_only_on_form_ready: Option<bool>,
+    /// Optional header for the SDK's payment form
+    pub payment_form_header_text: Option<String>,
+    /// Label type in the SDK's payment form
+    pub payment_form_label_type: Option<common_enums::PaymentLinkSdkLabelType>,
+    /// Boolean for controlling whether or not to show the explicit consent for storing cards
+    pub show_card_terms: Option<common_enums::PaymentLinkShowSdkTerms>,
 }
 
 common_utils::impl_to_sql_from_sql_json!(PaymentLinkConfigRequestForPayments);
diff --git a/crates/hyperswitch_domain_models/src/lib.rs b/crates/hyperswitch_domain_models/src/lib.rs
index a488c5aaa53..73f42dbd153 100644
--- a/crates/hyperswitch_domain_models/src/lib.rs
+++ b/crates/hyperswitch_domain_models/src/lib.rs
@@ -422,6 +422,9 @@ impl ApiModelToDieselModelConvertor<api_models::admin::PaymentLinkConfigRequest>
             sdk_ui_rules: item.sdk_ui_rules,
             payment_link_ui_rules: item.payment_link_ui_rules,
             enable_button_only_on_form_ready: item.enable_button_only_on_form_ready,
+            payment_form_header_text: item.payment_form_header_text,
+            payment_form_label_type: item.payment_form_label_type,
+            show_card_terms: item.show_card_terms,
         }
     }
     fn convert_back(self) -> api_models::admin::PaymentLinkConfigRequest {
@@ -446,6 +449,9 @@ impl ApiModelToDieselModelConvertor<api_models::admin::PaymentLinkConfigRequest>
             sdk_ui_rules,
             payment_link_ui_rules,
             enable_button_only_on_form_ready,
+            payment_form_header_text,
+            payment_form_label_type,
+            show_card_terms,
         } = self;
         api_models::admin::PaymentLinkConfigRequest {
             theme,
@@ -474,6 +480,9 @@ impl ApiModelToDieselModelConvertor<api_models::admin::PaymentLinkConfigRequest>
             sdk_ui_rules,
             payment_link_ui_rules,
             enable_button_only_on_form_ready,
+            payment_form_header_text,
+            payment_form_label_type,
+            show_card_terms,
         }
     }
 }
diff --git a/crates/openapi/src/openapi.rs b/crates/openapi/src/openapi.rs
index 47a5ad25f76..40cedb1e402 100644
--- a/crates/openapi/src/openapi.rs
+++ b/crates/openapi/src/openapi.rs
@@ -329,6 +329,8 @@ Never share your secret api keys. Keep them guarded and secure.
         api_models::enums::FeatureStatus,
         api_models::enums::MerchantProductType,
         api_models::enums::CtpServiceProvider,
+        api_models::enums::PaymentLinkSdkLabelType,
+        api_models::enums::PaymentLinkShowSdkTerms,
         api_models::admin::MerchantConnectorCreate,
         api_models::admin::AdditionalMerchantData,
         api_models::admin::ConnectorWalletDetails,
diff --git a/crates/openapi/src/openapi_v2.rs b/crates/openapi/src/openapi_v2.rs
index efc9dc9076b..ead503d1bb9 100644
--- a/crates/openapi/src/openapi_v2.rs
+++ b/crates/openapi/src/openapi_v2.rs
@@ -295,6 +295,8 @@ Never share your secret api keys. Keep them guarded and secure.
         api_models::enums::UIWidgetFormLayout,
         api_models::enums::MerchantProductType,
         api_models::enums::CtpServiceProvider,
+        api_models::enums::PaymentLinkSdkLabelType,
+        api_models::enums::PaymentLinkShowSdkTerms,
         api_models::admin::MerchantConnectorCreate,
         api_models::admin::AdditionalMerchantData,
         api_models::admin::CardTestingGuardConfig,
diff --git a/crates/router/src/core/payment_link.rs b/crates/router/src/core/payment_link.rs
index 48004dd740b..c2945335b52 100644
--- a/crates/router/src/core/payment_link.rs
+++ b/crates/router/src/core/payment_link.rs
@@ -139,6 +139,9 @@ pub async fn form_payment_link_data(
                 sdk_ui_rules: None,
                 payment_link_ui_rules: None,
                 enable_button_only_on_form_ready: DEFAULT_ENABLE_BUTTON_ONLY_ON_FORM_READY,
+                payment_form_header_text: None,
+                payment_form_label_type: None,
+                show_card_terms: None,
             }
         };
 
@@ -296,6 +299,9 @@ pub async fn form_payment_link_data(
         payment_link_ui_rules: payment_link_config.payment_link_ui_rules.clone(),
         status: payment_intent.status,
         enable_button_only_on_form_ready: payment_link_config.enable_button_only_on_form_ready,
+        payment_form_header_text: payment_link_config.payment_form_header_text.clone(),
+        payment_form_label_type: payment_link_config.payment_form_label_type,
+        show_card_terms: payment_link_config.show_card_terms,
     };
 
     Ok((
@@ -356,6 +362,9 @@ pub async fn initiate_secure_payment_link_flow(
                 payment_link_ui_rules: payment_link_config.payment_link_ui_rules,
                 enable_button_only_on_form_ready: payment_link_config
                     .enable_button_only_on_form_ready,
+                payment_form_header_text: payment_link_config.payment_form_header_text,
+                payment_form_label_type: payment_link_config.payment_form_label_type,
+                show_card_terms: payment_link_config.show_card_terms,
             };
             let js_script = format!(
                 "window.__PAYMENT_DETAILS = {}",
@@ -674,6 +683,9 @@ pub fn get_payment_link_config_based_on_priority(
         payment_button_text_colour,
         sdk_ui_rules,
         payment_link_ui_rules,
+        payment_form_header_text,
+        payment_form_label_type,
+        show_card_terms,
     ) = get_payment_link_config_value!(
         payment_create_link_config,
         business_theme_configs,
@@ -688,6 +700,9 @@ pub fn get_payment_link_config_based_on_priority(
         (payment_button_text_colour),
         (sdk_ui_rules),
         (payment_link_ui_rules),
+        (payment_form_header_text),
+        (payment_form_label_type),
+        (show_card_terms),
     );
 
     let payment_link_config =
@@ -716,6 +731,9 @@ pub fn get_payment_link_config_based_on_priority(
             sdk_ui_rules,
             payment_link_ui_rules,
             enable_button_only_on_form_ready,
+            payment_form_header_text,
+            payment_form_label_type,
+            show_card_terms,
         };
 
     Ok((payment_link_config, domain_name))
@@ -827,6 +845,9 @@ pub async fn get_payment_link_status(
             sdk_ui_rules: None,
             payment_link_ui_rules: None,
             enable_button_only_on_form_ready: DEFAULT_ENABLE_BUTTON_ONLY_ON_FORM_READY,
+            payment_form_header_text: None,
+            payment_form_label_type: None,
+            show_card_terms: None,
         }
     };
 
diff --git a/crates/router/src/core/payment_link/payment_link_initiate/payment_link_initiator.js b/crates/router/src/core/payment_link/payment_link_initiate/payment_link_initiator.js
index f9b0fe892cf..effd27cc64a 100644
--- a/crates/router/src/core/payment_link/payment_link_initiate/payment_link_initiator.js
+++ b/crates/router/src/core/payment_link/payment_link_initiate/payment_link_initiator.js
@@ -12,6 +12,7 @@ function initializeSDK() {
   var paymentDetails = window.__PAYMENT_DETAILS;
   var clientSecret = paymentDetails.client_secret;
   var sdkUiRules = paymentDetails.sdk_ui_rules;
+  var labelType = paymentDetails.payment_form_label_type;
   var appearance = {
     variables: {
       colorPrimary: paymentDetails.theme || "rgb(0, 109, 249)",
@@ -25,9 +26,12 @@ function initializeSDK() {
       colorBackground: "rgb(255, 255, 255)",
     },
   };
-  if (sdkUiRules !== null && typeof sdkUiRules === "object" && Object.getPrototypeOf(sdkUiRules) === Object.prototype) {
+  if (isObject(sdkUiRules)) {
     appearance.rules = sdkUiRules;
   }
+  if (labelType !== null && typeof labelType === "string") {
+    appearance.labels = labelType;
+  }
   // @ts-ignore
   hyper = window.Hyper(pub_key, {
     isPreloadEnabled: false,
@@ -70,11 +74,18 @@ function initializeSDK() {
     hideCardNicknameField: hideCardNicknameField,
     customMessageForCardTerms: paymentDetails.custom_message_for_card_terms,
   };
-  // @ts-ignore
+  var showCardTerms = paymentDetails.show_card_terms;
+  if (showCardTerms !== null && typeof showCardTerms === "string") {
+    unifiedCheckoutOptions.terms = {
+      card: showCardTerms
+    };
+  }
+  var paymentMethodsHeaderText = paymentDetails.payment_form_header_text;
+  if (paymentMethodsHeaderText !== null && typeof paymentMethodsHeaderText === "string") {
+    unifiedCheckoutOptions.paymentMethodsHeaderText = paymentMethodsHeaderText;
+  }
   unifiedCheckout = widgets.create("payment", unifiedCheckoutOptions);
-  // @ts-ignore
   mountUnifiedCheckout("#unified-checkout");
-  // @ts-ignore
   showSDK(paymentDetails.display_sdk_only, paymentDetails.enable_button_only_on_form_ready);
 
   let shimmer = document.getElementById("payment-details-shimmer");
diff --git a/crates/router/src/core/payment_link/payment_link_initiate/secure_payment_link_initiator.js b/crates/router/src/core/payment_link/payment_link_initiate/secure_payment_link_initiator.js
index 12ae76a2085..446428e6ff3 100644
--- a/crates/router/src/core/payment_link/payment_link_initiate/secure_payment_link_initiator.js
+++ b/crates/router/src/core/payment_link/payment_link_initiate/secure_payment_link_initiator.js
@@ -33,6 +33,7 @@ if (!isFramed) {
     var paymentDetails = window.__PAYMENT_DETAILS;
     var clientSecret = paymentDetails.client_secret;
     var sdkUiRules = paymentDetails.sdk_ui_rules;
+    var labelType = paymentDetails.payment_form_label_type;
     var appearance = {
       variables: {
         colorPrimary: paymentDetails.theme || "rgb(0, 109, 249)",
@@ -46,9 +47,12 @@ if (!isFramed) {
         colorBackground: "rgb(255, 255, 255)",
       },
     };
-    if (sdkUiRules !== null && typeof sdkUiRules === "object" && Object.getPrototypeOf(sdkUiRules) === Object.prototype) {
+    if (isObject(sdkUiRules)) {
       appearance.rules = sdkUiRules;
     }
+    if (labelType !== null && typeof labelType === "string") {
+      appearance.labels = labelType;
+    }
     // @ts-ignore
     hyper = window.Hyper(pub_key, {
       isPreloadEnabled: false,
@@ -93,11 +97,19 @@ if (!isFramed) {
       showCardFormByDefault: paymentDetails.show_card_form_by_default,
       customMessageForCardTerms: paymentDetails.custom_message_for_card_terms,
     };
-    // @ts-ignore
+    var showCardTerms = paymentDetails.show_card_terms;
+    if (showCardTerms !== null && typeof showCardTerms === "string") {
+      unifiedCheckoutOptions.terms = {
+        card: showCardTerms
+      };
+    }
+    var paymentMethodsHeaderText = paymentDetails.payment_form_header_text;
+    if (paymentMethodsHeaderText !== null && typeof paymentMethodsHeaderText === "string") {
+      unifiedCheckoutOptions.paymentMethodsHeaderText = paymentMethodsHeaderText;
+    }
+
     unifiedCheckout = widgets.create("payment", unifiedCheckoutOptions);
-    // @ts-ignore
     mountUnifiedCheckout("#unified-checkout");
-    // @ts-ignore
     showSDK(paymentDetails.display_sdk_only, paymentDetails.enable_button_only_on_form_ready);
 
     let shimmer = document.getElementById("payment-details-shimmer");
diff --git a/crates/router/src/core/payments/transformers.rs b/crates/router/src/core/payments/transformers.rs
index 5b6b014aca4..d8014768719 100644
--- a/crates/router/src/core/payments/transformers.rs
+++ b/crates/router/src/core/payments/transformers.rs
@@ -4529,6 +4529,9 @@ impl ForeignFrom<api_models::admin::PaymentLinkConfigRequest>
             sdk_ui_rules: config.sdk_ui_rules,
             payment_link_ui_rules: config.payment_link_ui_rules,
             enable_button_only_on_form_ready: config.enable_button_only_on_form_ready,
+            payment_form_header_text: config.payment_form_header_text,
+            payment_form_label_type: config.payment_form_label_type,
+            show_card_terms: config.show_card_terms,
         }
     }
 }
@@ -4600,6 +4603,9 @@ impl ForeignFrom<diesel_models::PaymentLinkConfigRequestForPayments>
             sdk_ui_rules: config.sdk_ui_rules,
             payment_link_ui_rules: config.payment_link_ui_rules,
             enable_button_only_on_form_ready: config.enable_button_only_on_form_ready,
+            payment_form_header_text: config.payment_form_header_text,
+            payment_form_label_type: config.payment_form_label_type,
+            show_card_terms: config.show_card_terms,
         }
     }
 }
diff --git a/crates/router/src/routes/customers.rs b/crates/router/src/routes/customers.rs
index c9ff466af00..b889c41e7bc 100644
--- a/crates/router/src/routes/customers.rs
+++ b/crates/router/src/routes/customers.rs
@@ -152,7 +152,7 @@ pub async fn customers_list(
     let flow = Flow::CustomersList;
     let payload = query.into_inner();
 
-    api::server_wrap(
+    Box::pin(api::server_wrap(
         flow,
         state,
         &req,
@@ -174,7 +174,7 @@ pub async fn customers_list(
             req.headers(),
         ),
         api_locking::LockAction::NotApplicable,
-    )
+    ))
     .await
 }
 #[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "customer_v2")))]
diff --git a/crates/router/src/types/transformers.rs b/crates/router/src/types/transformers.rs
index 6d529b12809..04690465466 100644
--- a/crates/router/src/types/transformers.rs
+++ b/crates/router/src/types/transformers.rs
@@ -2188,6 +2188,9 @@ impl ForeignFrom<api_models::admin::PaymentLinkConfigRequest>
             sdk_ui_rules: item.sdk_ui_rules,
             payment_link_ui_rules: item.payment_link_ui_rules,
             enable_button_only_on_form_ready: item.enable_button_only_on_form_ready,
+            payment_form_header_text: item.payment_form_header_text,
+            payment_form_label_type: item.payment_form_label_type,
+            show_card_terms: item.show_card_terms,
         }
     }
 }
@@ -2219,6 +2222,9 @@ impl ForeignFrom<diesel_models::business_profile::PaymentLinkConfigRequest>
             sdk_ui_rules: item.sdk_ui_rules,
             payment_link_ui_rules: item.payment_link_ui_rules,
             enable_button_only_on_form_ready: item.enable_button_only_on_form_ready,
+            payment_form_header_text: item.payment_form_header_text,
+            payment_form_label_type: item.payment_form_label_type,
+            show_card_terms: item.show_card_terms,
         }
     }
 }

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

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

## Description
This PR exposes three configurations for payment links
1. `payment_form_header_text` - for rendering a header text for payment links
2. `payment_form_label_type` - for specifying the type of payment form labels (floating / above / never)
3. `show_card_terms` - for controlling visibility of the terms for cards (auto / always / never)


### 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`
4. `crates/router/src/configs`
5. `loadtest/config`
-->


## Motivation and Context
Helps in exposing UI functionalities through some configs for SDK.

## How did you test it?
Tested locally

<details>
    <summary>Create payment link with new configs</summary>

cURL

    curl --location --request POST 'http://localhost:8080/payments' \
        --header 'Content-Type: application/json' \
        --header 'Accept: application/json' \
        --header 'api-key: dev_ML2p8kRGcMvi4oQ3cPnIfz5R2rO31efjWKXzgMnbRCnj5pUpjiki8K2HONlmMAb4' \
        --data-raw '{"authentication_type":"three_ds","customer_id":"cus_9SCrW9x19m2WbGYHprJS","profile_id":"pro_jZ4ix0hYxn8qi2NSSYih","amount":100,"currency":"EUR","payment_link":true,"setup_future_usage":"off_session","capture_method":"automatic","billing":{"address":{"line1":"1467","line2":"Harrison Street","line3":"Harrison Street","city":"San Fransico","state":"CA","zip":"94122","country":"NL","first_name":"John","last_name":"Doe"},"phone":{"number":"8056594427","country_code":"+91"},"email":"random@juspay.in"},"return_url":"https://example.com","payment_link_config":{"theme":"#2167AE","enable_button_only_on_form_ready":true,"display_sdk_only":true,"show_card_terms":"never","payment_form_label_type":"floating","payment_form_header_text":"Detalles de tu tarjeta","payment_link_ui_rules":{"#submit":{"height":"max-content","borderRadius":"50px","padding":"14px 20px","marginTop":"48px","fontSize":"20px"},"#submit.not-ready":{"backgroundColor":"#A6ADAF !important"},"#submit.processing":{"paddingLeft":"50px !important","paddingRight":"50px !important"}},"sdk_ui_rules":{".Input, .Input:focus, .Input--invalid, .Input--empty":{"border":"none","boxShadow":"none","borderRadius":"28px","paddingLeft":"22px !important","paddingBottom":"2px !important","backgroundColor":"rgb(231, 234, 235) !important","height":"56px","fontSize":"20px"},".Input, .Input:focus, .Input--empty":{"color":"#23366F"},".Input--invalid":{"border":"2px solid #CB4B40 !important"},".Label":{"marginLeft":"22px","color":"#2167AE","opacity":"1 !important","bottom":"5px"},".Label--invalid, .Input--invalid, .Error":{"color":"#CB4B40 !important","opacity":"1 !important"},".Label--floating":{"opacity":"1 !important"},".InputLogo--empty":{"color":"#979797"},".InputLogo":{"color":"#23366F"},".InputLogo--invalid":{"color":"#CB4B40"},".PaymentLabel":{"color":"#23366F !important","fontSize":"24px"}}}}'
    
Response

    {"payment_id":"pay_McmUUZfc21SHM7Hpc9Sr","merchant_id":"merchant_1743758708","status":"requires_payment_method","amount":100,"net_amount":100,"shipping_cost":null,"amount_capturable":100,"amount_received":null,"connector":null,"client_secret":"pay_McmUUZfc21SHM7Hpc9Sr_secret_ohEWaukkfjWDkoB2U7pc","created":"2025-04-07T11:49:19.273Z","currency":"EUR","customer_id":"cus_9SCrW9x19m2WbGYHprJS","customer":{"id":"cus_9SCrW9x19m2WbGYHprJS","name":null,"email":null,"phone":null,"phone_country_code":null},"description":null,"refunds":null,"disputes":null,"mandate_id":null,"mandate_data":null,"setup_future_usage":"off_session","off_session":null,"capture_on":null,"capture_method":"automatic","payment_method":null,"payment_method_data":null,"payment_token":null,"shipping":null,"billing":{"address":{"city":"San Fransico","country":"NL","line1":"1467","line2":"Harrison Street","line3":"Harrison Street","zip":"94122","state":"CA","first_name":"John","last_name":"Doe"},"phone":{"number":"8056594427","country_code":"+91"},"email":"random@juspay.in"},"order_details":null,"email":null,"name":null,"phone":null,"return_url":"https://example.com/","authentication_type":"three_ds","statement_descriptor_name":null,"statement_descriptor_suffix":null,"next_action":null,"cancellation_reason":null,"error_code":null,"error_message":null,"unified_code":null,"unified_message":null,"payment_experience":null,"payment_method_type":null,"connector_label":null,"business_country":null,"business_label":"default","business_sub_label":null,"allowed_payment_method_types":null,"ephemeral_key":{"customer_id":"cus_9SCrW9x19m2WbGYHprJS","created_at":1744026559,"expires":1744030159,"secret":"epk_74f58545483841e7a27ef0bddca9b8b5"},"manual_retry_allowed":null,"connector_transaction_id":null,"frm_message":null,"metadata":null,"connector_metadata":null,"feature_metadata":null,"reference_id":null,"payment_link":{"link":"http://localhost:8080/payment_link/merchant_1743758708/pay_McmUUZfc21SHM7Hpc9Sr?locale=en","secure_link":"http://localhost:8080/payment_link/s/merchant_1743758708/pay_McmUUZfc21SHM7Hpc9Sr?locale=en","payment_link_id":"plink_1VJHoVm7E71veuUAJhI8"},"profile_id":"pro_jZ4ix0hYxn8qi2NSSYih","surcharge_details":null,"attempt_count":1,"merchant_decision":null,"merchant_connector_id":null,"incremental_authorization_allowed":null,"authorization_count":null,"incremental_authorizations":null,"external_authentication_details":null,"external_3ds_authentication_attempted":false,"expires_on":"2025-04-07T12:04:19.254Z","fingerprint":null,"browser_info":null,"payment_method_id":null,"payment_method_status":null,"updated":"2025-04-07T11:49:19.358Z","split_payments":null,"frm_metadata":null,"extended_authorization_applied":null,"capture_before":null,"merchant_order_reference_id":null,"order_tax_amount":null,"connector_mandate_id":null,"card_discovery":null,"force_3ds_challenge":false,"force_3ds_challenge_trigger":false,"issuer_error_code":null,"issuer_error_message":null}

Verify below things

1. Label is floating when
2. Payment form has a header text
3. Card terms are missing for off_session payment type

<img width="627" alt="Screenshot 2025-04-07 at 5 21 04 PM" src="https://github.com/user-attachments/assets/5e395ab6-44e7-44ab-9660-57603f79c4c2" />

</details>


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

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