Bug: [REFACTOR] remove non mandatory fields for Adyen Platform payouts



Hyperswitch mandates a few fields for AdyenPlatform connector which are not needed. These are needed to be made optional.

List of fields
- Billing address details
diff --git a/crates/hyperswitch_connectors/src/connectors/adyenplatform/transformers/payouts.rs b/crates/hyperswitch_connectors/src/connectors/adyenplatform/transformers/payouts.rs
index 82c9afadeed..6c964aea20f 100644
--- a/crates/hyperswitch_connectors/src/connectors/adyenplatform/transformers/payouts.rs
+++ b/crates/hyperswitch_connectors/src/connectors/adyenplatform/transformers/payouts.rs
@@ -2,9 +2,9 @@ use api_models::{payouts, webhooks};
 use common_enums::enums;
 use common_utils::pii;
 use error_stack::{report, ResultExt};
-use hyperswitch_domain_models::types;
+use hyperswitch_domain_models::types::{self, PayoutsRouterData};
 use hyperswitch_interfaces::errors::ConnectorError;
-use masking::Secret;
+use masking::{ExposeInterface, Secret};
 use serde::{Deserialize, Serialize};
 
 use super::{AdyenPlatformRouterData, Error};
@@ -68,10 +68,11 @@ pub struct AdyenBankAccountDetails {
 #[derive(Debug, Serialize, Deserialize)]
 #[serde(rename_all = "camelCase")]
 pub struct AdyenAccountHolder {
-    address: AdyenAddress,
+    address: Option<AdyenAddress>,
     first_name: Option<Secret<String>>,
     last_name: Option<Secret<String>>,
     full_name: Option<Secret<String>>,
+    email: Option<pii::Email>,
     #[serde(rename = "reference")]
     customer_id: Option<String>,
     #[serde(rename = "type")]
@@ -251,40 +252,94 @@ impl TryFrom<&hyperswitch_domain_models::address::AddressDetails> for AdyenAddre
     }
 }
 
-impl<F> TryFrom<(&types::PayoutsRouterData<F>, enums::PayoutType)> for AdyenAccountHolder {
+impl<F> TryFrom<(&PayoutsRouterData<F>, &payouts::CardPayout)> for AdyenAccountHolder {
     type Error = Error;
 
     fn try_from(
-        (router_data, payout_type): (&types::PayoutsRouterData<F>, enums::PayoutType),
+        (router_data, card): (&PayoutsRouterData<F>, &payouts::CardPayout),
     ) -> Result<Self, Self::Error> {
-        let billing_address = router_data.get_billing_address()?;
-        let (first_name, last_name, full_name) = match payout_type {
-            enums::PayoutType::Card => (
-                Some(router_data.get_billing_first_name()?),
-                Some(router_data.get_billing_last_name()?),
-                None,
-            ),
-            enums::PayoutType::Bank => (None, None, Some(router_data.get_billing_full_name()?)),
-            _ => Err(ConnectorError::NotSupported {
-                message: "Payout method not supported".to_string(),
-                connector: "Adyen",
-            })?,
+        let billing_address = router_data.get_optional_billing();
+
+        // Address is required for both card and bank payouts
+        let address = billing_address
+            .and_then(|billing| billing.address.as_ref().map(|addr| addr.try_into()))
+            .transpose()?
+            .ok_or(ConnectorError::MissingRequiredField {
+                field_name: "address",
+            })?;
+
+        let (first_name, last_name) = if let Some(card_holder_name) = &card.card_holder_name {
+            let exposed_name = card_holder_name.clone().expose();
+            let name_parts: Vec<&str> = exposed_name.split_whitespace().collect();
+            let first_name = name_parts
+                .first()
+                .map(|s| Secret::new(s.to_string()))
+                .ok_or(ConnectorError::MissingRequiredField {
+                    field_name: "card_holder_name.first_name",
+                })?;
+            let last_name = if name_parts.len() > 1 {
+                let remaining_names: Vec<&str> = name_parts.iter().skip(1).copied().collect();
+                Some(Secret::new(remaining_names.join(" ")))
+            } else {
+                return Err(ConnectorError::MissingRequiredField {
+                    field_name: "card_holder_name.last_name",
+                }
+                .into());
+            };
+            (Some(first_name), last_name)
+        } else {
+            return Err(ConnectorError::MissingRequiredField {
+                field_name: "card_holder_name",
+            }
+            .into());
         };
+
         Ok(Self {
-            address: billing_address.try_into()?,
+            address: Some(address),
             first_name,
             last_name,
-            full_name,
+            full_name: None,
+            email: router_data.get_optional_billing_email(),
+            customer_id: Some(router_data.get_customer_id()?.get_string_repr().to_owned()),
+            entity_type: Some(EntityType::from(router_data.request.entity_type)),
+        })
+    }
+}
+
+impl<F> TryFrom<(&PayoutsRouterData<F>, &payouts::Bank)> for AdyenAccountHolder {
+    type Error = Error;
+
+    fn try_from(
+        (router_data, _bank): (&PayoutsRouterData<F>, &payouts::Bank),
+    ) -> Result<Self, Self::Error> {
+        let billing_address = router_data.get_optional_billing();
+
+        // Address is required for both card and bank payouts
+        let address = billing_address
+            .and_then(|billing| billing.address.as_ref().map(|addr| addr.try_into()))
+            .transpose()?
+            .ok_or(ConnectorError::MissingRequiredField {
+                field_name: "address",
+            })?;
+
+        let full_name = router_data.get_billing_full_name()?;
+
+        Ok(Self {
+            address: Some(address),
+            first_name: None,
+            last_name: None,
+            full_name: Some(full_name),
+            email: router_data.get_optional_billing_email(),
             customer_id: Some(router_data.get_customer_id()?.get_string_repr().to_owned()),
             entity_type: Some(EntityType::from(router_data.request.entity_type)),
         })
     }
 }
 
-impl<F> TryFrom<&AdyenPlatformRouterData<&types::PayoutsRouterData<F>>> for AdyenTransferRequest {
+impl<F> TryFrom<&AdyenPlatformRouterData<&PayoutsRouterData<F>>> for AdyenTransferRequest {
     type Error = Error;
     fn try_from(
-        item: &AdyenPlatformRouterData<&types::PayoutsRouterData<F>>,
+        item: &AdyenPlatformRouterData<&PayoutsRouterData<F>>,
     ) -> Result<Self, Self::Error> {
         let request = &item.router_data.request;
         let (counterparty, priority) = match item.router_data.get_payout_method_data()? {
@@ -292,8 +347,7 @@ impl<F> TryFrom<&AdyenPlatformRouterData<&types::PayoutsRouterData<F>>> for Adye
                 utils::get_unimplemented_payment_method_error_message("Adyenplatform"),
             ))?,
             payouts::PayoutMethodData::Card(c) => {
-                let card_holder: AdyenAccountHolder =
-                    (item.router_data, enums::PayoutType::Card).try_into()?;
+                let card_holder: AdyenAccountHolder = (item.router_data, &c).try_into()?;
                 let card_identification = AdyenCardIdentification {
                     card_number: c.card_number,
                     expiry_month: c.expiry_month,
@@ -309,8 +363,7 @@ impl<F> TryFrom<&AdyenPlatformRouterData<&types::PayoutsRouterData<F>>> for Adye
                 (counterparty, None)
             }
             payouts::PayoutMethodData::Bank(bd) => {
-                let account_holder: AdyenAccountHolder =
-                    (item.router_data, enums::PayoutType::Bank).try_into()?;
+                let account_holder: AdyenAccountHolder = (item.router_data, &bd).try_into()?;
                 let bank_details = match bd {
                     payouts::Bank::Sepa(b) => AdyenBankAccountIdentification {
                         bank_type: "iban".to_string(),
@@ -367,9 +420,7 @@ impl<F> TryFrom<&AdyenPlatformRouterData<&types::PayoutsRouterData<F>>> for Adye
     }
 }
 
-impl<F> TryFrom<PayoutsResponseRouterData<F, AdyenTransferResponse>>
-    for types::PayoutsRouterData<F>
-{
+impl<F> TryFrom<PayoutsResponseRouterData<F, AdyenTransferResponse>> for PayoutsRouterData<F> {
     type Error = Error;
     fn try_from(
         item: PayoutsResponseRouterData<F, AdyenTransferResponse>,
diff --git a/crates/router/src/configs/defaults/payout_required_fields.rs b/crates/router/src/configs/defaults/payout_required_fields.rs
index a056a3ac931..d6b316c42b4 100644
--- a/crates/router/src/configs/defaults/payout_required_fields.rs
+++ b/crates/router/src/configs/defaults/payout_required_fields.rs
@@ -66,12 +66,81 @@ impl Default for PayoutRequiredFields {
     }
 }
 
+fn get_billing_details_for_payment_method(
+    connector: PayoutConnectors,
+    payment_method_type: PaymentMethodType,
+) -> HashMap<String, RequiredFieldInfo> {
+    match connector {
+        PayoutConnectors::Adyenplatform => {
+            let mut fields = HashMap::from([
+                (
+                    "billing.address.line1".to_string(),
+                    RequiredFieldInfo {
+                        required_field: "billing.address.line1".to_string(),
+                        display_name: "billing_address_line1".to_string(),
+                        field_type: FieldType::Text,
+                        value: None,
+                    },
+                ),
+                (
+                    "billing.address.line2".to_string(),
+                    RequiredFieldInfo {
+                        required_field: "billing.address.line2".to_string(),
+                        display_name: "billing_address_line2".to_string(),
+                        field_type: FieldType::Text,
+                        value: None,
+                    },
+                ),
+                (
+                    "billing.address.city".to_string(),
+                    RequiredFieldInfo {
+                        required_field: "billing.address.city".to_string(),
+                        display_name: "billing_address_city".to_string(),
+                        field_type: FieldType::Text,
+                        value: None,
+                    },
+                ),
+                (
+                    "billing.address.country".to_string(),
+                    RequiredFieldInfo {
+                        required_field: "billing.address.country".to_string(),
+                        display_name: "billing_address_country".to_string(),
+                        field_type: FieldType::UserAddressCountry {
+                            options: get_countries_for_connector(connector)
+                                .iter()
+                                .map(|country| country.to_string())
+                                .collect::<Vec<String>>(),
+                        },
+                        value: None,
+                    },
+                ),
+            ]);
+
+            // Add first_name for bank payouts only
+            if payment_method_type == PaymentMethodType::Sepa {
+                fields.insert(
+                    "billing.address.first_name".to_string(),
+                    RequiredFieldInfo {
+                        required_field: "billing.address.first_name".to_string(),
+                        display_name: "billing_address_first_name".to_string(),
+                        field_type: FieldType::Text,
+                        value: None,
+                    },
+                );
+            }
+
+            fields
+        }
+        _ => get_billing_details(connector),
+    }
+}
+
 #[cfg(feature = "v1")]
 fn get_connector_payment_method_type_fields(
     connector: PayoutConnectors,
     payment_method_type: PaymentMethodType,
 ) -> (PaymentMethodType, ConnectorFields) {
-    let mut common_fields = get_billing_details(connector);
+    let mut common_fields = get_billing_details_for_payment_method(connector, payment_method_type);
     match payment_method_type {
         // Card
         PaymentMethodType::Debit => {
@@ -409,67 +478,6 @@ fn get_billing_details(connector: PayoutConnectors) -> HashMap<String, RequiredF
                 },
             ),
         ]),
-        PayoutConnectors::Adyenplatform => HashMap::from([
-            (
-                "billing.address.line1".to_string(),
-                RequiredFieldInfo {
-                    required_field: "billing.address.line1".to_string(),
-                    display_name: "billing_address_line1".to_string(),
-                    field_type: FieldType::Text,
-                    value: None,
-                },
-            ),
-            (
-                "billing.address.line2".to_string(),
-                RequiredFieldInfo {
-                    required_field: "billing.address.line2".to_string(),
-                    display_name: "billing_address_line2".to_string(),
-                    field_type: FieldType::Text,
-                    value: None,
-                },
-            ),
-            (
-                "billing.address.city".to_string(),
-                RequiredFieldInfo {
-                    required_field: "billing.address.city".to_string(),
-                    display_name: "billing_address_city".to_string(),
-                    field_type: FieldType::Text,
-                    value: None,
-                },
-            ),
-            (
-                "billing.address.country".to_string(),
-                RequiredFieldInfo {
-                    required_field: "billing.address.country".to_string(),
-                    display_name: "billing_address_country".to_string(),
-                    field_type: FieldType::UserAddressCountry {
-                        options: get_countries_for_connector(connector)
-                            .iter()
-                            .map(|country| country.to_string())
-                            .collect::<Vec<String>>(),
-                    },
-                    value: None,
-                },
-            ),
-            (
-                "billing.address.first_name".to_string(),
-                RequiredFieldInfo {
-                    required_field: "billing.address.first_name".to_string(),
-                    display_name: "billing_address_first_name".to_string(),
-                    field_type: FieldType::Text,
-                    value: None,
-                },
-            ),
-            (
-                "billing.address.last_name".to_string(),
-                RequiredFieldInfo {
-                    required_field: "billing.address.last_name".to_string(),
-                    display_name: "billing_address_last_name".to_string(),
-                    field_type: FieldType::Text,
-                    value: None,
-                },
-            ),
-        ]),
         PayoutConnectors::Wise => HashMap::from([
             (
                 "billing.address.line1".to_string(),
@@ -531,75 +539,6 @@ fn get_billing_details(connector: PayoutConnectors) -> HashMap<String, RequiredF
                 },
             ),
         ]),
-        _ => HashMap::from([
-            (
-                "billing.address.line1".to_string(),
-                RequiredFieldInfo {
-                    required_field: "billing.address.line1".to_string(),
-                    display_name: "billing_address_line1".to_string(),
-                    field_type: FieldType::Text,
-                    value: None,
-                },
-            ),
-            (
-                "billing.address.line2".to_string(),
-                RequiredFieldInfo {
-                    required_field: "billing.address.line2".to_string(),
-                    display_name: "billing_address_line2".to_string(),
-                    field_type: FieldType::Text,
-                    value: None,
-                },
-            ),
-            (
-                "billing.address.city".to_string(),
-                RequiredFieldInfo {
-                    required_field: "billing.address.city".to_string(),
-                    display_name: "billing_address_city".to_string(),
-                    field_type: FieldType::Text,
-                    value: None,
-                },
-            ),
-            (
-                "billing.address.zip".to_string(),
-                RequiredFieldInfo {
-                    required_field: "billing.address.zip".to_string(),
-                    display_name: "billing_address_zip".to_string(),
-                    field_type: FieldType::Text,
-                    value: None,
-                },
-            ),
-            (
-                "billing.address.country".to_string(),
-                RequiredFieldInfo {
-                    required_field: "billing.address.country".to_string(),
-                    display_name: "billing_address_country".to_string(),
-                    field_type: FieldType::UserAddressCountry {
-                        options: get_countries_for_connector(connector)
-                            .iter()
-                            .map(|country| country.to_string())
-                            .collect::<Vec<String>>(),
-                    },
-                    value: None,
-                },
-            ),
-            (
-                "billing.address.first_name".to_string(),
-                RequiredFieldInfo {
-                    required_field: "billing.address.first_name".to_string(),
-                    display_name: "billing_address_first_name".to_string(),
-                    field_type: FieldType::Text,
-                    value: None,
-                },
-            ),
-            (
-                "billing.address.last_name".to_string(),
-                RequiredFieldInfo {
-                    required_field: "billing.address.last_name".to_string(),
-                    display_name: "billing_address_last_name".to_string(),
-                    field_type: FieldType::Text,
-                    value: None,
-                },
-            ),
-        ]),
+        _ => HashMap::from([]),
     }
 }

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

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

## Description
This PR removes any non mandatory fields from AdyenPlatform connector for card and SEPA payouts.

New list

- Card payouts
[payout_method_data.card.card_number](https://api-reference.hyperswitch.io/v1/payouts/payouts--create#body-payout-method-data-card-card-number)
[payout_method_data.card.expiry_month](https://api-reference.hyperswitch.io/v1/payouts/payouts--create#body-payout-method-data-card-expiry-month)
[payout_method_data.card.expiry_year](https://api-reference.hyperswitch.io/v1/payouts/payouts--create#body-payout-method-data-card-expiry-year)
[payout_method_data.card.card_holder_name](https://api-reference.hyperswitch.io/v1/payouts/payouts--create#body-payout-method-data-card-card-holder-name)
[billing.address.line1](https://api-reference.hyperswitch.io/v1/payouts/payouts--create#body-billing-address-line1)
[billing.address.line2](https://api-reference.hyperswitch.io/v1/payouts/payouts--create#body-billing-address-line2)
[billing.address.city](https://api-reference.hyperswitch.io/v1/payouts/payouts--create#body-billing-address-city)
[billing.address.country](https://api-reference.hyperswitch.io/v1/payouts/payouts--create#body-billing-address-country)

- Bank payouts
Along with the payout method data depending on the bank (https://api-reference.hyperswitch.io/v1/payouts/payouts--create#body-payout-method-data-bank)
[billing.address.line1](https://api-reference.hyperswitch.io/v1/payouts/payouts--create#body-billing-address-line1)
[billing.address.line2](https://api-reference.hyperswitch.io/v1/payouts/payouts--create#body-billing-address-line2)
[billing.address.city](https://api-reference.hyperswitch.io/v1/payouts/payouts--create#body-billing-address-city)
[billing.address.country](https://api-reference.hyperswitch.io/v1/payouts/payouts--create#body-billing-address-country)
[billing.address.first_name](https://api-reference.hyperswitch.io/v1/payouts/payouts--create#body-billing-address-first-name)

### 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
This PR removes any mandatory fields that were needed for processing payouts via Adyenplatform

## How did you test it?
Tested locally

<details>
    <summary>[Negative] 1. Create SEPA payout with missing billing details</summary>

cURL

    curl --location --request POST 'http://localhost:8080/payouts/create' \
        --header 'Content-Type: application/json' \
        --header 'api-key: dev_Rko4ofOnDKpn3Dbs0ZUz8PQ1qdIDgT183ONTPiY0dUFAJcv4eyDrzIzEnd6iFc0j' \
        --data '{"amount":1,"currency":"EUR","customer_id":"cus_5SyQoohBVj6cdUfmqLLK","description":"Its my first payout request","payout_type":"bank","priority":"instant","payout_method_data":{"bank":{"iban":"NL06INGB5632579034"}},"connector":["adyenplatform"],"entity_type":"Individual","recurring":true,"metadata":{"ref":"123"},"confirm":true,"auto_fulfill":true,"profile_id":"pro_AiAxQKHVhrQ8xdFAllu5"}'

Response

    {
        "error": {
            "type": "invalid_request",
            "message": "Missing required param: address",
            "code": "IR_04"
        }
    }

</details>


<details>
    <summary>[Negative] 2. Create Card payout with missing billing details</summary>

cURL

    curl --location --request POST 'http://localhost:8080/payouts/create' \
        --header 'Content-Type: application/json' \
        --header 'api-key: dev_Rko4ofOnDKpn3Dbs0ZUz8PQ1qdIDgT183ONTPiY0dUFAJcv4eyDrzIzEnd6iFc0j' \
        --data '{"amount":100,"currency":"EUR","profile_id":"pro_AiAxQKHVhrQ8xdFAllu5","customer_id":"cus_5SyQoohBVj6cdUfmqLLK","connector":["adyenplatform"],"description":"Its my first payout request","payout_type":"card","payout_method_data":{"card":{"card_number":"4111111111111111","expiry_month":"03","expiry_year":"2030","card_holder_name":"John Doe"}},"recurring":true,"metadata":{"ref":"123"},"confirm":true,"auto_fulfill":true}'

Response

    {
        "error": {
            "type": "invalid_request",
            "message": "Missing required param: address",
            "code": "IR_04"
        }
    }

</details>

<details>
    <summary>3. Create a SEPA payout with mandatory fields</summary>

cURL

    curl --location --request POST 'http://localhost:8080/payouts/create' \
        --header 'Content-Type: application/json' \
        --header 'api-key: dev_Rko4ofOnDKpn3Dbs0ZUz8PQ1qdIDgT183ONTPiY0dUFAJcv4eyDrzIzEnd6iFc0j' \
        --data '{"amount":1,"currency":"EUR","customer_id":"cus_5SyQoohBVj6cdUfmqLLK","description":"Its my first payout request","payout_type":"bank","priority":"instant","payout_method_data":{"bank":{"iban":"NL06INGB5632579034"}},"connector":["adyenplatform"],"billing":{"address":{"line1":"Raadhuisplein","line2":"92","city":"Hoogeveen","country":"NL","first_name":"John"}},"entity_type":"Individual","recurring":true,"metadata":{"ref":"123"},"confirm":true,"auto_fulfill":true,"profile_id":"pro_AiAxQKHVhrQ8xdFAllu5"}'

Response

    {"payout_id":"payout_rBKFN2yzDxmULDYFUApY","merchant_id":"merchant_1755587924","merchant_order_reference_id":null,"amount":1,"currency":"EUR","connector":"adyenplatform","payout_type":"bank","payout_method_data":{"bank":{"iban":"NL06I********79034","bank_name":null,"bank_country_code":null,"bank_city":null,"bic":null}},"billing":{"address":{"city":"Hoogeveen","country":"NL","line1":"Raadhuisplein","line2":"92","line3":null,"zip":null,"state":null,"first_name":"John","last_name":null,"origin_zip":null},"phone":null,"email":null},"auto_fulfill":true,"customer_id":"cus_5SyQoohBVj6cdUfmqLLK","customer":{"id":"cus_5SyQoohBVj6cdUfmqLLK","name":"John Nether","email":null,"phone":"6168205362","phone_country_code":"+1"},"client_secret":"payout_payout_rBKFN2yzDxmULDYFUApY_secret_3G01mWdnAttOAfeC2wa8","return_url":null,"business_country":null,"business_label":null,"description":"Its my first payout request","entity_type":"Individual","recurring":true,"metadata":{"ref":"123"},"merchant_connector_id":"mca_KrzAoNCxtUDCf6kAzESd","status":"initiated","error_message":null,"error_code":null,"profile_id":"pro_AiAxQKHVhrQ8xdFAllu5","created":"2025-08-19T09:31:28.239Z","connector_transaction_id":"38EBH16813GN2MVG","priority":"instant","payout_link":null,"email":null,"name":"John Nether","phone":"6168205362","phone_country_code":"+1","unified_code":null,"unified_message":null,"payout_method_id":"pm_jod7TuYT46i6dCHkGmev"}

</details>

<details>
    <summary>4. Card payout with required fields</summary>

cURL

    curl --location --request POST 'http://localhost:8080/payouts/create' \
        --header 'Content-Type: application/json' \
        --header 'api-key: dev_Rko4ofOnDKpn3Dbs0ZUz8PQ1qdIDgT183ONTPiY0dUFAJcv4eyDrzIzEnd6iFc0j' \
        --data '{"amount":100,"currency":"EUR","profile_id":"pro_AiAxQKHVhrQ8xdFAllu5","customer_id":"cus_5SyQoohBVj6cdUfmqLLK","connector":["adyenplatform"],"description":"Its my first payout request","payout_type":"card","payout_method_data":{"card":{"card_number":"4111111111111111","expiry_month":"03","expiry_year":"2030","card_holder_name":"John Doe"}},"billing":{"address":{"line1":"1467","line2":"Harrison Street","city":"San Fransico","country":"FR"}},"recurring":true,"metadata":{"ref":"123"},"confirm":true,"auto_fulfill":true}'

Response

    {"payout_id":"payout_Lg2UYU0m2wQQC23NIGSD","merchant_id":"merchant_1755587924","merchant_order_reference_id":null,"amount":100,"currency":"EUR","connector":"adyenplatform","payout_type":"card","payout_method_data":{"card":{"card_issuer":null,"card_network":null,"card_type":null,"card_issuing_country":null,"bank_code":null,"last4":"1111","card_isin":"411111","card_extended_bin":null,"card_exp_month":"03","card_exp_year":"2030","card_holder_name":"John Doe"}},"billing":{"address":{"city":"San Fransico","country":"FR","line1":"1467","line2":"Harrison Street","line3":null,"zip":null,"state":null,"first_name":null,"last_name":null,"origin_zip":null},"phone":null,"email":null},"auto_fulfill":true,"customer_id":"cus_5SyQoohBVj6cdUfmqLLK","customer":{"id":"cus_5SyQoohBVj6cdUfmqLLK","name":"John Nether","email":null,"phone":"6168205362","phone_country_code":"+1"},"client_secret":"payout_payout_Lg2UYU0m2wQQC23NIGSD_secret_52k9WAGvV9OkAbfIZ4t4","return_url":null,"business_country":null,"business_label":null,"description":"Its my first payout request","entity_type":"Individual","recurring":true,"metadata":{"ref":"123"},"merchant_connector_id":"mca_KrzAoNCxtUDCf6kAzESd","status":"initiated","error_message":null,"error_code":null,"profile_id":"pro_AiAxQKHVhrQ8xdFAllu5","created":"2025-08-19T09:32:26.497Z","connector_transaction_id":"38EBH66813GZBWSE","priority":null,"payout_link":null,"email":null,"name":"John Nether","phone":"6168205362","phone_country_code":"+1","unified_code":null,"unified_message":null,"payout_method_id":"pm_sKZq1HLWSxrszfZGuubX"}

</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`
- [ ] I reviewed the submitted code
- [ ] I added unit tests for my changes where possible
