Bug: [FEATURE] Introduce ApplePay to Paysafe



Both Encrypt and Decrypt flows
diff --git a/config/config.example.toml b/config/config.example.toml
index bae0da78fbb..61a53ee0fd4 100644
--- a/config/config.example.toml
+++ b/config/config.example.toml
@@ -946,6 +946,9 @@ credit = { country = "US,CA,IL,GB", currency = "ILS,USD,EUR" }
 debit = { country = "US,CA,IL,GB", currency = "ILS,USD,EUR" }
 apple_pay = { country = "US,CA,IL,GB", currency = "ILS,USD,EUR" }
 
+[pm_filters.paysafe]
+apple_pay = {country = "AF,AX,AL,DZ,AS,AD,AO,AI,AQ,AG,AR,AM,AW,AU,AT,AZ,BS,BH,BD,BB,BY,BE,BZ,BJ,BM,BT,BO,BQ,BA,BW,BV,BR,IO,BN,BG,BF,BI,KH,CM,CA,CV,KY,CF,TD,CL,CN,CX,CC,CO,KM,CG,CD,CK,CR,CI,HR,CU,CW,CY,CZ,DK,DJ,DM,DO,EC,EG,SV,GQ,ER,EE,ET,FK,FO,FJ,FI,FR,GF,PF,TF,GA,GM,GE,DE,GH,GI,GR,GL,GD,GP,GU,GT,GG,GN,GW,GY,HT,HM,HN,HK,HU,IS,IN,ID,IR,IQ,IE,IM,IL,IT,JM,JP,JE,JO,KZ,KE,KI,KP,KR,KW,KG,LA,LV,LB,LS,LR,LY,LI,LT,LU,MO,MK,MG,MW,MY,MV,ML,MT,MH,MQ,MR,MU,YT,MX,FM,MD,MC,MN,ME,MS,MA,MZ,MM,NA,NR,NP,NC,NZ,NI,NE,NG,NU,NF,MP,NO,OM,PK,PW,PS,PA,PG,PY,PE,PH,PN,PL,PT,PR,QA,RE,RO,RU,RW,BL,SH,KN,LC,MF,VC,WS,SM,ST,SA,SN,RS,SC,SL,SG,SX,SK,SI,SB,SO,ZA,GS,SS,ES,LK,PM,SD,SR,SJ,SZ,SE,CH,SY,TW,TJ,TZ,TH,NL,TL,TG,TK,TO,TT,TN,TR,TM,TC,TV,UG,UA,AE,GB,US,UM,UY,UZ,VU,VA,VE,VN,VG,VI,WF,EH,YE,ZM,ZW", currency = "ARS,AUD,AZN,BHD,BOB,BAM,BRL,BGN,CAD,CLP,CNY,COP,CRC,HRK,CZK,DKK,DOP,XCD,EGP,ETB,EUR,FJD,GEL,GTQ,HTG,HNL,HKD,HUF,INR,IDR,JMD,JPY,JOD,KZT,KES,KRW,KWD,LBP,LYD,MWK,MUR,MXN,MDL,MAD,ILS,NZD,NGN,NOK,OMR,PKR,PAB,PYG,PEN,PHP,PLN,GBP,QAR,RON,RUB,RWF,SAR,RSD,SGD,ZAR,LKR,SEK,CHF,SYP,TWD,THB,TTD,TND,TRY,UAH,AED,UYU,USD,VND" }
+
 [connector_customer]
 connector_list = "authorizedotnet,dwolla,facilitapay,gocardless,hyperswitch_vault,stax,stripe"
 payout_connector_list = "nomupay,stripe,wise"
diff --git a/config/deployments/integration_test.toml b/config/deployments/integration_test.toml
index f1addc2b581..1a1f9682074 100644
--- a/config/deployments/integration_test.toml
+++ b/config/deployments/integration_test.toml
@@ -818,6 +818,9 @@ giropay = { country = "DZ,AO,BJ,BW,BF,BI,CM,CV,TD,KM,CI,CD,DJ,EG,ER,ET,GA,GM,GN,
 ideal = { country = "DZ,AO,BJ,BW,BF,BI,CM,CV,TD,KM,CI,CD,DJ,EG,ER,ET,GA,GM,GN,GW,KE,LS,MG,MW,ML,MR,MU,MA,MZ,NA,NE,NG,CG,RW,SH,ST,SN,SC,SL,SO,ZA,SZ,TZ,TG,TN,UG,ZM,ZW,AI,AG,AR,AW,BS,BB,BZ,BM,BO,BR,VG,CA,KY,CL,CO,CR,DM,DO,EC,SV,FK,GL,GD,GT,GY,HN,JM,MX,MS,NI,PA,PY,PE,KN,LC,PM,VC,SR,TT,TC,US,UY,VE,AM,AU,BH,BT,BN,KH,CN,CK,FJ,PF,HK,IN,ID,IL,JP,JO,KZ,KI,KW,KG,LA,MY,MV,MH,FM,MN,NR,NP,NC,NZ,NU,NF,OM,PW,PG,PH,PN,QA,WS,SA,SG,SB,KR,LK,TW,TJ,TH,TO,TM,TV,AE,VU,VN,WF,YE,AL,AD,AT,AZ,BY,BE,BA,BG,HR,CY,CZ,DK,EE,FO,FI,FR,GE,DE,GR,HU,IS,IE,IT,LV,LI,LT,LU,MK,MT,MD,MC,ME,NL,NO,PL,PT,RO,RU,SM,RS,SK,SI,ES,SJ,SE,CH,UA,GB,VA", currency = "AUD,BRL,CAD,CNY,CZK,DKK,EUR,HKD,HUF,ILS,JPY,MYR,MXN,TWD,NZD,NOK,PHP,PLN,GBP,SGD,SEK,CHF,THB,USD" }
 sofort = { country = "DZ,AO,BJ,BW,BF,BI,CM,CV,TD,KM,CI,CD,DJ,EG,ER,ET,GA,GM,GN,GW,KE,LS,MG,MW,ML,MR,MU,MA,MZ,NA,NE,NG,CG,RW,SH,ST,SN,SC,SL,SO,ZA,SZ,TZ,TG,TN,UG,ZM,ZW,AI,AG,AR,AW,BS,BB,BZ,BM,BO,BR,VG,CA,KY,CL,CO,CR,DM,DO,EC,SV,FK,GL,GD,GT,GY,HN,JM,MX,MS,NI,PA,PY,PE,KN,LC,PM,VC,SR,TT,TC,US,UY,VE,AM,AU,BH,BT,BN,KH,CN,CK,FJ,PF,HK,IN,ID,IL,JP,JO,KZ,KI,KW,KG,LA,MY,MV,MH,FM,MN,NR,NP,NC,NZ,NU,NF,OM,PW,PG,PH,PN,QA,WS,SA,SG,SB,KR,LK,TW,TJ,TH,TO,TM,TV,AE,VU,VN,WF,YE,AL,AD,AT,AZ,BY,BE,BA,BG,HR,CY,CZ,DK,EE,FO,FI,FR,GE,DE,GR,HU,IS,IE,IT,LV,LI,LT,LU,MK,MT,MD,MC,ME,NL,NO,PL,PT,RO,RU,SM,RS,SK,SI,ES,SJ,SE,CH,UA,GB,VA", currency = "AUD,BRL,CAD,CNY,CZK,DKK,EUR,HKD,HUF,ILS,JPY,MYR,MXN,TWD,NZD,NOK,PHP,PLN,GBP,SGD,SEK,CHF,THB,USD" }
 
+[pm_filters.paysafe]
+apple_pay = {country = "AF,AX,AL,DZ,AS,AD,AO,AI,AQ,AG,AR,AM,AW,AU,AT,AZ,BS,BH,BD,BB,BY,BE,BZ,BJ,BM,BT,BO,BQ,BA,BW,BV,BR,IO,BN,BG,BF,BI,KH,CM,CA,CV,KY,CF,TD,CL,CN,CX,CC,CO,KM,CG,CD,CK,CR,CI,HR,CU,CW,CY,CZ,DK,DJ,DM,DO,EC,EG,SV,GQ,ER,EE,ET,FK,FO,FJ,FI,FR,GF,PF,TF,GA,GM,GE,DE,GH,GI,GR,GL,GD,GP,GU,GT,GG,GN,GW,GY,HT,HM,HN,HK,HU,IS,IN,ID,IR,IQ,IE,IM,IL,IT,JM,JP,JE,JO,KZ,KE,KI,KP,KR,KW,KG,LA,LV,LB,LS,LR,LY,LI,LT,LU,MO,MK,MG,MW,MY,MV,ML,MT,MH,MQ,MR,MU,YT,MX,FM,MD,MC,MN,ME,MS,MA,MZ,MM,NA,NR,NP,NC,NZ,NI,NE,NG,NU,NF,MP,NO,OM,PK,PW,PS,PA,PG,PY,PE,PH,PN,PL,PT,PR,QA,RE,RO,RU,RW,BL,SH,KN,LC,MF,VC,WS,SM,ST,SA,SN,RS,SC,SL,SG,SX,SK,SI,SB,SO,ZA,GS,SS,ES,LK,PM,SD,SR,SJ,SZ,SE,CH,SY,TW,TJ,TZ,TH,NL,TL,TG,TK,TO,TT,TN,TR,TM,TC,TV,UG,UA,AE,GB,US,UM,UY,UZ,VU,VA,VE,VN,VG,VI,WF,EH,YE,ZM,ZW", currency = "ARS,AUD,AZN,BHD,BOB,BAM,BRL,BGN,CAD,CLP,CNY,COP,CRC,HRK,CZK,DKK,DOP,XCD,EGP,ETB,EUR,FJD,GEL,GTQ,HTG,HNL,HKD,HUF,INR,IDR,JMD,JPY,JOD,KZT,KES,KRW,KWD,LBP,LYD,MWK,MUR,MXN,MDL,MAD,ILS,NZD,NGN,NOK,OMR,PKR,PAB,PYG,PEN,PHP,PLN,GBP,QAR,RON,RUB,RWF,SAR,RSD,SGD,ZAR,LKR,SEK,CHF,SYP,TWD,THB,TTD,TND,TRY,UAH,AED,UYU,USD,VND" }
+
 [pm_filters.datatrans]
 credit = { country = "AL,AD,AM,AT,AZ,BY,BE,BA,BG,CH,CY,CZ,DE,DK,EE,ES,FI,FR,GB,GE,GR,HR,HU,IE,IS,IT,KZ,LI,LT,LU,LV,MC,MD,ME,MK,MT,NL,NO,PL,PT,RO,RU,SE,SI,SK,SM,TR,UA,VA",  currency = "BHD,BIF,CHF,DJF,EUR,GBP,GNF,IQD,ISK,JPY,JOD,KMF,KRW,KWD,LYD,OMR,PYG,RWF,TND,UGX,USD,VND,VUV,XAF,XOF,XPF" }
 debit = { country = "AL,AD,AM,AT,AZ,BY,BE,BA,BG,CH,CY,CZ,DE,DK,EE,ES,FI,FR,GB,GE,GR,HR,HU,IE,IS,IT,KZ,LI,LT,LU,LV,MC,MD,ME,MK,MT,NL,NO,PL,PT,RO,RU,SE,SI,SK,SM,TR,UA,VA",  currency = "BHD,BIF,CHF,DJF,EUR,GBP,GNF,IQD,ISK,JPY,JOD,KMF,KRW,KWD,LYD,OMR,PYG,RWF,TND,UGX,USD,VND,VUV,XAF,XOF,XPF" }
diff --git a/config/deployments/production.toml b/config/deployments/production.toml
index 3fd609dd9b7..35b3052d5bc 100644
--- a/config/deployments/production.toml
+++ b/config/deployments/production.toml
@@ -828,6 +828,9 @@ credit = { country = "US,CA,IL,GB", currency = "ILS,USD,EUR" }
 debit = { country = "US,CA,IL,GB", currency = "ILS,USD,EUR" }
 apple_pay = { country = "US,CA,IL,GB", currency = "ILS,USD,EUR" }
 
+[pm_filters.paysafe]
+apple_pay = {country = "AF,AX,AL,DZ,AS,AD,AO,AI,AQ,AG,AR,AM,AW,AU,AT,AZ,BS,BH,BD,BB,BY,BE,BZ,BJ,BM,BT,BO,BQ,BA,BW,BV,BR,IO,BN,BG,BF,BI,KH,CM,CA,CV,KY,CF,TD,CL,CN,CX,CC,CO,KM,CG,CD,CK,CR,CI,HR,CU,CW,CY,CZ,DK,DJ,DM,DO,EC,EG,SV,GQ,ER,EE,ET,FK,FO,FJ,FI,FR,GF,PF,TF,GA,GM,GE,DE,GH,GI,GR,GL,GD,GP,GU,GT,GG,GN,GW,GY,HT,HM,HN,HK,HU,IS,IN,ID,IR,IQ,IE,IM,IL,IT,JM,JP,JE,JO,KZ,KE,KI,KP,KR,KW,KG,LA,LV,LB,LS,LR,LY,LI,LT,LU,MO,MK,MG,MW,MY,MV,ML,MT,MH,MQ,MR,MU,YT,MX,FM,MD,MC,MN,ME,MS,MA,MZ,MM,NA,NR,NP,NC,NZ,NI,NE,NG,NU,NF,MP,NO,OM,PK,PW,PS,PA,PG,PY,PE,PH,PN,PL,PT,PR,QA,RE,RO,RU,RW,BL,SH,KN,LC,MF,VC,WS,SM,ST,SA,SN,RS,SC,SL,SG,SX,SK,SI,SB,SO,ZA,GS,SS,ES,LK,PM,SD,SR,SJ,SZ,SE,CH,SY,TW,TJ,TZ,TH,NL,TL,TG,TK,TO,TT,TN,TR,TM,TC,TV,UG,UA,AE,GB,US,UM,UY,UZ,VU,VA,VE,VN,VG,VI,WF,EH,YE,ZM,ZW", currency = "ARS,AUD,AZN,BHD,BOB,BAM,BRL,BGN,CAD,CLP,CNY,COP,CRC,HRK,CZK,DKK,DOP,XCD,EGP,ETB,EUR,FJD,GEL,GTQ,HTG,HNL,HKD,HUF,INR,IDR,JMD,JPY,JOD,KZT,KES,KRW,KWD,LBP,LYD,MWK,MUR,MXN,MDL,MAD,ILS,NZD,NGN,NOK,OMR,PKR,PAB,PYG,PEN,PHP,PLN,GBP,QAR,RON,RUB,RWF,SAR,RSD,SGD,ZAR,LKR,SEK,CHF,SYP,TWD,THB,TTD,TND,TRY,UAH,AED,UYU,USD,VND" }
+
 [payout_method_filters.adyenplatform]
 sepa = { country = "AT,BE,CH,CZ,DE,EE,ES,FI,FR,GB,HU,IE,IT,LT,LV,NL,NO,PL,PT,SE,SK", currency = "EUR,CZK,DKK,HUF,NOK,PLN,SEK,GBP,CHF" }
 credit = { country = "AT,BE,BG,CY,CZ,DE,DK,EE,ES,FI,FR,GB,GR,HR,HU,IE,IS,IT,LI,LT,LU,LV,MT,NL,NO,PL,PT,RO,SE,SI,SK,US", currency = "EUR,USD,GBP" }
@@ -870,7 +873,7 @@ dwolla = { long_lived_token = true, payment_method = "bank_debit" }
 outgoing_enabled = true
 redis_lock_expiry_seconds = 180
 
-[l2_l3_data_config]  
+[l2_l3_data_config]
 enabled = "false"
 
 [webhook_source_verification_call]
@@ -907,4 +910,3 @@ click_to_pay = {connector_list = "adyen, cybersource, trustpay"}
 [grpc_client.unified_connector_service]
 ucs_only_connectors = "paytm, phonepe"    # Comma-separated list of connectors that use UCS only
 ucs_psync_disabled_connectors = "cashtocode"    # Comma-separated list of connectors to disable UCS PSync call
-
diff --git a/config/deployments/sandbox.toml b/config/deployments/sandbox.toml
index 44238899b50..50c49a05cac 100644
--- a/config/deployments/sandbox.toml
+++ b/config/deployments/sandbox.toml
@@ -840,6 +840,9 @@ credit = { country = "US,CA,IL,GB", currency = "ILS,USD,EUR" }
 debit = { country = "US,CA,IL,GB", currency = "ILS,USD,EUR" }
 apple_pay = { country = "US,CA,IL,GB", currency = "ILS,USD,EUR" }
 
+[pm_filters.paysafe]
+apple_pay = {country = "AF,AX,AL,DZ,AS,AD,AO,AI,AQ,AG,AR,AM,AW,AU,AT,AZ,BS,BH,BD,BB,BY,BE,BZ,BJ,BM,BT,BO,BQ,BA,BW,BV,BR,IO,BN,BG,BF,BI,KH,CM,CA,CV,KY,CF,TD,CL,CN,CX,CC,CO,KM,CG,CD,CK,CR,CI,HR,CU,CW,CY,CZ,DK,DJ,DM,DO,EC,EG,SV,GQ,ER,EE,ET,FK,FO,FJ,FI,FR,GF,PF,TF,GA,GM,GE,DE,GH,GI,GR,GL,GD,GP,GU,GT,GG,GN,GW,GY,HT,HM,HN,HK,HU,IS,IN,ID,IR,IQ,IE,IM,IL,IT,JM,JP,JE,JO,KZ,KE,KI,KP,KR,KW,KG,LA,LV,LB,LS,LR,LY,LI,LT,LU,MO,MK,MG,MW,MY,MV,ML,MT,MH,MQ,MR,MU,YT,MX,FM,MD,MC,MN,ME,MS,MA,MZ,MM,NA,NR,NP,NC,NZ,NI,NE,NG,NU,NF,MP,NO,OM,PK,PW,PS,PA,PG,PY,PE,PH,PN,PL,PT,PR,QA,RE,RO,RU,RW,BL,SH,KN,LC,MF,VC,WS,SM,ST,SA,SN,RS,SC,SL,SG,SX,SK,SI,SB,SO,ZA,GS,SS,ES,LK,PM,SD,SR,SJ,SZ,SE,CH,SY,TW,TJ,TZ,TH,NL,TL,TG,TK,TO,TT,TN,TR,TM,TC,TV,UG,UA,AE,GB,US,UM,UY,UZ,VU,VA,VE,VN,VG,VI,WF,EH,YE,ZM,ZW", currency = "ARS,AUD,AZN,BHD,BOB,BAM,BRL,BGN,CAD,CLP,CNY,COP,CRC,HRK,CZK,DKK,DOP,XCD,EGP,ETB,EUR,FJD,GEL,GTQ,HTG,HNL,HKD,HUF,INR,IDR,JMD,JPY,JOD,KZT,KES,KRW,KWD,LBP,LYD,MWK,MUR,MXN,MDL,MAD,ILS,NZD,NGN,NOK,OMR,PKR,PAB,PYG,PEN,PHP,PLN,GBP,QAR,RON,RUB,RWF,SAR,RSD,SGD,ZAR,LKR,SEK,CHF,SYP,TWD,THB,TTD,TND,TRY,UAH,AED,UYU,USD,VND" }
+
 [payout_method_filters.stripe]
 ach = { country = "US", currency = "USD" }
 
diff --git a/config/development.toml b/config/development.toml
index e145d1eb087..f570a4046fc 100644
--- a/config/development.toml
+++ b/config/development.toml
@@ -988,6 +988,9 @@ credit = { country = "US,CA,IL,GB", currency = "ILS,USD,EUR" }
 debit = { country = "US,CA,IL,GB", currency = "ILS,USD,EUR" }
 apple_pay = { country = "US,CA,IL,GB", currency = "ILS,USD,EUR" }
 
+[pm_filters.paysafe]
+apple_pay = {country = "AF,AX,AL,DZ,AS,AD,AO,AI,AQ,AG,AR,AM,AW,AU,AT,AZ,BS,BH,BD,BB,BY,BE,BZ,BJ,BM,BT,BO,BQ,BA,BW,BV,BR,IO,BN,BG,BF,BI,KH,CM,CA,CV,KY,CF,TD,CL,CN,CX,CC,CO,KM,CG,CD,CK,CR,CI,HR,CU,CW,CY,CZ,DK,DJ,DM,DO,EC,EG,SV,GQ,ER,EE,ET,FK,FO,FJ,FI,FR,GF,PF,TF,GA,GM,GE,DE,GH,GI,GR,GL,GD,GP,GU,GT,GG,GN,GW,GY,HT,HM,HN,HK,HU,IS,IN,ID,IR,IQ,IE,IM,IL,IT,JM,JP,JE,JO,KZ,KE,KI,KP,KR,KW,KG,LA,LV,LB,LS,LR,LY,LI,LT,LU,MO,MK,MG,MW,MY,MV,ML,MT,MH,MQ,MR,MU,YT,MX,FM,MD,MC,MN,ME,MS,MA,MZ,MM,NA,NR,NP,NC,NZ,NI,NE,NG,NU,NF,MP,NO,OM,PK,PW,PS,PA,PG,PY,PE,PH,PN,PL,PT,PR,QA,RE,RO,RU,RW,BL,SH,KN,LC,MF,VC,WS,SM,ST,SA,SN,RS,SC,SL,SG,SX,SK,SI,SB,SO,ZA,GS,SS,ES,LK,PM,SD,SR,SJ,SZ,SE,CH,SY,TW,TJ,TZ,TH,NL,TL,TG,TK,TO,TT,TN,TR,TM,TC,TV,UG,UA,AE,GB,US,UM,UY,UZ,VU,VA,VE,VN,VG,VI,WF,EH,YE,ZM,ZW", currency = "ARS,AUD,AZN,BHD,BOB,BAM,BRL,BGN,CAD,CLP,CNY,COP,CRC,HRK,CZK,DKK,DOP,XCD,EGP,ETB,EUR,FJD,GEL,GTQ,HTG,HNL,HKD,HUF,INR,IDR,JMD,JPY,JOD,KZT,KES,KRW,KWD,LBP,LYD,MWK,MUR,MXN,MDL,MAD,ILS,NZD,NGN,NOK,OMR,PKR,PAB,PYG,PEN,PHP,PLN,GBP,QAR,RON,RUB,RWF,SAR,RSD,SGD,ZAR,LKR,SEK,CHF,SYP,TWD,THB,TTD,TND,TRY,UAH,AED,UYU,USD,VND" }
+
 [tokenization]
 stripe = { long_lived_token = false, payment_method = "wallet", payment_method_type = { type = "disable_only", list = "google_pay" } }
 checkout = { long_lived_token = false, payment_method = "wallet", apple_pay_pre_decrypt_flow = "network_tokenization" }
diff --git a/config/docker_compose.toml b/config/docker_compose.toml
index c36904d5fe8..55e6d194aed 100644
--- a/config/docker_compose.toml
+++ b/config/docker_compose.toml
@@ -971,6 +971,9 @@ credit = { country = "US,CA,IL,GB", currency = "ILS,USD,EUR" }
 debit = { country = "US,CA,IL,GB", currency = "ILS,USD,EUR" }
 apple_pay = { country = "US,CA,IL,GB", currency = "ILS,USD,EUR" }
 
+[pm_filters.paysafe]
+apple_pay = {country = "AF,AX,AL,DZ,AS,AD,AO,AI,AQ,AG,AR,AM,AW,AU,AT,AZ,BS,BH,BD,BB,BY,BE,BZ,BJ,BM,BT,BO,BQ,BA,BW,BV,BR,IO,BN,BG,BF,BI,KH,CM,CA,CV,KY,CF,TD,CL,CN,CX,CC,CO,KM,CG,CD,CK,CR,CI,HR,CU,CW,CY,CZ,DK,DJ,DM,DO,EC,EG,SV,GQ,ER,EE,ET,FK,FO,FJ,FI,FR,GF,PF,TF,GA,GM,GE,DE,GH,GI,GR,GL,GD,GP,GU,GT,GG,GN,GW,GY,HT,HM,HN,HK,HU,IS,IN,ID,IR,IQ,IE,IM,IL,IT,JM,JP,JE,JO,KZ,KE,KI,KP,KR,KW,KG,LA,LV,LB,LS,LR,LY,LI,LT,LU,MO,MK,MG,MW,MY,MV,ML,MT,MH,MQ,MR,MU,YT,MX,FM,MD,MC,MN,ME,MS,MA,MZ,MM,NA,NR,NP,NC,NZ,NI,NE,NG,NU,NF,MP,NO,OM,PK,PW,PS,PA,PG,PY,PE,PH,PN,PL,PT,PR,QA,RE,RO,RU,RW,BL,SH,KN,LC,MF,VC,WS,SM,ST,SA,SN,RS,SC,SL,SG,SX,SK,SI,SB,SO,ZA,GS,SS,ES,LK,PM,SD,SR,SJ,SZ,SE,CH,SY,TW,TJ,TZ,TH,NL,TL,TG,TK,TO,TT,TN,TR,TM,TC,TV,UG,UA,AE,GB,US,UM,UY,UZ,VU,VA,VE,VN,VG,VI,WF,EH,YE,ZM,ZW", currency = "ARS,AUD,AZN,BHD,BOB,BAM,BRL,BGN,CAD,CLP,CNY,COP,CRC,HRK,CZK,DKK,DOP,XCD,EGP,ETB,EUR,FJD,GEL,GTQ,HTG,HNL,HKD,HUF,INR,IDR,JMD,JPY,JOD,KZT,KES,KRW,KWD,LBP,LYD,MWK,MUR,MXN,MDL,MAD,ILS,NZD,NGN,NOK,OMR,PKR,PAB,PYG,PEN,PHP,PLN,GBP,QAR,RON,RUB,RWF,SAR,RSD,SGD,ZAR,LKR,SEK,CHF,SYP,TWD,THB,TTD,TND,TRY,UAH,AED,UYU,USD,VND" }
+
 [bank_config.online_banking_fpx]
 adyen.banks = "affin_bank,agro_bank,alliance_bank,am_bank,bank_islam,bank_muamalat,bank_rakyat,bank_simpanan_nasional,cimb_bank,hong_leong_bank,hsbc_bank,kuwait_finance_house,maybank,ocbc_bank,public_bank,rhb_bank,standard_chartered_bank,uob_bank"
 fiuu.banks = "affin_bank,agro_bank,alliance_bank,am_bank,bank_of_china,bank_islam,bank_muamalat,bank_rakyat,bank_simpanan_nasional,cimb_bank,hong_leong_bank,hsbc_bank,kuwait_finance_house,maybank,ocbc_bank,public_bank,rhb_bank,standard_chartered_bank,uob_bank"
@@ -1257,7 +1260,7 @@ max_retry_count_for_thirty_day = 20
 
 [revenue_recovery.recovery_timestamp] # Timestamp configuration for Revenue Recovery
 initial_timestamp_in_seconds = 3600        # number of seconds added to start time for Decider service of Revenue Recovery
-job_schedule_buffer_time_in_seconds = 3600  # time in seconds to be added in schedule time as a buffer 
+job_schedule_buffer_time_in_seconds = 3600  # time in seconds to be added in schedule time as a buffer
 reopen_workflow_buffer_time_in_seconds = 60  # time in seconds to be added in scheduling for calculate workflow
 
 [clone_connector_allowlist]
diff --git a/crates/common_types/src/payments.rs b/crates/common_types/src/payments.rs
index e57c4370e48..57f239f6135 100644
--- a/crates/common_types/src/payments.rs
+++ b/crates/common_types/src/payments.rs
@@ -669,6 +669,13 @@ impl ApplePayPredecryptData {
         let month = self.get_expiry_month()?.expose();
         Ok(Secret::new(format!("{month}{year}")))
     }
+
+    /// Get the expiry date in YYMM format from the Apple Pay pre-decrypt data
+    pub fn get_expiry_date_as_yymm(&self) -> Result<Secret<String>, errors::ValidationError> {
+        let year = self.get_two_digit_expiry_year()?.expose();
+        let month = self.get_expiry_month()?.expose();
+        Ok(Secret::new(format!("{year}{month}")))
+    }
 }
 
 /// type of action that needs to taken after consuming recovery payload
diff --git a/crates/connector_configs/src/connector.rs b/crates/connector_configs/src/connector.rs
index 186e08989ec..bf593ac2c7f 100644
--- a/crates/connector_configs/src/connector.rs
+++ b/crates/connector_configs/src/connector.rs
@@ -121,13 +121,22 @@ pub struct AccountIdConfigForRedirect {
     pub three_ds: Option<Vec<InputData>>,
 }
 
+#[serde_with::skip_serializing_none]
+#[derive(Debug, Deserialize, Serialize, Clone)]
+
+pub struct AccountIdConfigForApplePay {
+    pub encrypt: Option<Vec<InputData>>,
+    pub decrypt: Option<Vec<InputData>>,
+}
+
 #[serde_with::skip_serializing_none]
 #[derive(Debug, Deserialize, Serialize, Clone)]
 pub struct AccountIDSupportedMethods {
+    apple_pay: HashMap<String, AccountIdConfigForApplePay>,
     card: HashMap<String, AccountIdConfigForCard>,
-    skrill: HashMap<String, AccountIdConfigForRedirect>,
     interac: HashMap<String, AccountIdConfigForRedirect>,
     pay_safe_card: HashMap<String, AccountIdConfigForRedirect>,
+    skrill: HashMap<String, AccountIdConfigForRedirect>,
 }
 
 #[serde_with::skip_serializing_none]
diff --git a/crates/connector_configs/toml/development.toml b/crates/connector_configs/toml/development.toml
index 7d68c4de4fb..3c743540347 100644
--- a/crates/connector_configs/toml/development.toml
+++ b/crates/connector_configs/toml/development.toml
@@ -2158,7 +2158,7 @@ merchant_secret="Source verification key"
 api_key="Client ID"
 key1="Client Secret"
 [dwolla.connector_webhook_details]
-merchant_secret="Source verification key" 
+merchant_secret = "Source verification key"
 [dwolla.metadata.merchant_funding_source]
 name = "merchant_funding_source"
 label = "Funding Source ID"
@@ -6643,7 +6643,7 @@ options=[]
 [[santander.voucher]]
   payment_method_type = "boleto"
 [[santander.bank_transfer]]
-  payment_method_type = "pix"  
+  payment_method_type = "pix"
 
 [santander.connector_auth.BodyKey]
 api_key="Client ID"
@@ -6878,11 +6878,16 @@ payment_method_type = "interac"
 payment_method_type = "skrill"
 [[paysafe.gift_card]]
 payment_method_type = "pay_safe_card"
+[[paysafe.wallet]]
+payment_method_type = "apple_pay"
+
 [paysafe.connector_auth.BodyKey]
 api_key = "Username"
 key1 = "Password"
+
 [paysafe.connector_webhook_details]
 merchant_secret = "Source verification key"
+
 [[paysafe.metadata.account_id.card.USD.three_ds]]
 name="three_ds"
 label="ThreeDS account id"
@@ -6950,6 +6955,71 @@ placeholder="Enter eur Account ID"
 required=true
 type="Text"
 
+[[paysafe.metadata.account_id.apple_pay.USD.encrypt]]
+name="encrypt"
+label="Encrypt"
+placeholder="Enter encrypt value"
+required=true
+type="Text"
+[[paysafe.metadata.account_id.apple_pay.USD.decrypt]]
+name="decrypt"
+label="Decrypt"
+placeholder="Enter decrypt value"
+required=true
+type="Text"
+
+[[paysafe.metadata.apple_pay]]
+name="certificate"
+label="Merchant Certificate (Base64 Encoded)"
+placeholder="Enter Merchant Certificate (Base64 Encoded)"
+required=true
+type="Text"
+[[paysafe.metadata.apple_pay]]
+name="certificate_keys"
+label="Merchant PrivateKey (Base64 Encoded)"
+placeholder="Enter Merchant PrivateKey (Base64 Encoded)"
+required=true
+type="Text"
+[[paysafe.metadata.apple_pay]]
+name="merchant_identifier"
+label="Apple Merchant Identifier"
+placeholder="Enter Apple Merchant Identifier"
+required=true
+type="Text"
+[[paysafe.metadata.apple_pay]]
+name="display_name"
+label="Display Name"
+placeholder="Enter Display Name"
+required=true
+type="Text"
+[[paysafe.metadata.apple_pay]]
+name="initiative"
+label="Domain"
+placeholder="Enter Domain"
+required=true
+type="Select"
+options=["web","ios"]
+[[paysafe.metadata.apple_pay]]
+name="initiative_context"
+label="Domain Name"
+placeholder="Enter Domain Name"
+required=true
+type="Text"
+[[paysafe.metadata.apple_pay]]
+name="merchant_business_country"
+label="Merchant Business Country"
+placeholder="Enter Merchant Business Country"
+required=true
+type="Select"
+options=[]
+[[paysafe.metadata.apple_pay]]
+name="payment_processing_details_at"
+label="Payment Processing Details At"
+placeholder="Enter Payment Processing Details At"
+required=true
+type="Radio"
+options=["Connector","Hyperswitch"]
+
 [peachpayments]
 [[peachpayments.credit]]
   payment_method_type = "Mastercard"
diff --git a/crates/connector_configs/toml/production.toml b/crates/connector_configs/toml/production.toml
index eff63730974..e606a71f33f 100644
--- a/crates/connector_configs/toml/production.toml
+++ b/crates/connector_configs/toml/production.toml
@@ -1322,7 +1322,7 @@ api_key="Celero API Key"
   api_key = "Checkbook API Secret key"
 [checkbook.connector_webhook_details]
   merchant_secret="Source verification key"
-  
+
 [checkout]
 [[checkout.credit]]
 payment_method_type = "Mastercard"
@@ -5346,7 +5346,7 @@ type = "Text"
 [[santander.voucher]]
   payment_method_type = "boleto"
 [[santander.bank_transfer]]
-  payment_method_type = "pix"  
+  payment_method_type = "pix"
 [santander.connector_auth.BodyKey]
 api_key = "Client ID"
 key1 = "Client Secret"
@@ -5596,11 +5596,16 @@ payment_method_type = "interac"
 payment_method_type = "skrill"
 [[paysafe.gift_card]]
 payment_method_type = "pay_safe_card"
+[[paysafe.wallet]]
+payment_method_type = "apple_pay"
+
 [paysafe.connector_auth.BodyKey]
 api_key = "Username"
 key1 = "Password"
+
 [paysafe.connector_webhook_details]
 merchant_secret = "Source verification key"
+
 [[paysafe.metadata.account_id.card.USD.three_ds]]
 name="three_ds"
 label="ThreeDS account id"
@@ -5668,6 +5673,71 @@ placeholder="Enter eur Account ID"
 required=true
 type="Text"
 
+[[paysafe.metadata.account_id.apple_pay.USD.encrypt]]
+name="encrypt"
+label="Encrypt"
+placeholder="Enter encrypt value"
+required=true
+type="Text"
+[[paysafe.metadata.account_id.apple_pay.USD.decrypt]]
+name="decrypt"
+label="Decrypt"
+placeholder="Enter decrypt value"
+required=true
+type="Text"
+
+[[paysafe.metadata.apple_pay]]
+name="certificate"
+label="Merchant Certificate (Base64 Encoded)"
+placeholder="Enter Merchant Certificate (Base64 Encoded)"
+required=true
+type="Text"
+[[paysafe.metadata.apple_pay]]
+name="certificate_keys"
+label="Merchant PrivateKey (Base64 Encoded)"
+placeholder="Enter Merchant PrivateKey (Base64 Encoded)"
+required=true
+type="Text"
+[[paysafe.metadata.apple_pay]]
+name="merchant_identifier"
+label="Apple Merchant Identifier"
+placeholder="Enter Apple Merchant Identifier"
+required=true
+type="Text"
+[[paysafe.metadata.apple_pay]]
+name="display_name"
+label="Display Name"
+placeholder="Enter Display Name"
+required=true
+type="Text"
+[[paysafe.metadata.apple_pay]]
+name="initiative"
+label="Domain"
+placeholder="Enter Domain"
+required=true
+type="Select"
+options=["web","ios"]
+[[paysafe.metadata.apple_pay]]
+name="initiative_context"
+label="Domain Name"
+placeholder="Enter Domain Name"
+required=true
+type="Text"
+[[paysafe.metadata.apple_pay]]
+name="merchant_business_country"
+label="Merchant Business Country"
+placeholder="Enter Merchant Business Country"
+required=true
+type="Select"
+options=[]
+[[paysafe.metadata.apple_pay]]
+name="payment_processing_details_at"
+label="Payment Processing Details At"
+placeholder="Enter Payment Processing Details At"
+required=true
+type="Radio"
+options=["Connector","Hyperswitch"]
+
 [peachpayments]
 [[peachpayments.credit]]
   payment_method_type = "Mastercard"
diff --git a/crates/connector_configs/toml/sandbox.toml b/crates/connector_configs/toml/sandbox.toml
index 379ea955c9a..cd03cb4b8f8 100644
--- a/crates/connector_configs/toml/sandbox.toml
+++ b/crates/connector_configs/toml/sandbox.toml
@@ -6624,7 +6624,7 @@ options = []
 [[santander.voucher]]
   payment_method_type = "boleto"
 [[santander.bank_transfer]]
-  payment_method_type = "pix"  
+  payment_method_type = "pix"
 
 [santander.connector_auth.BodyKey]
 api_key = "Client ID"
@@ -6857,11 +6857,16 @@ payment_method_type = "interac"
 payment_method_type = "skrill"
 [[paysafe.gift_card]]
 payment_method_type = "pay_safe_card"
+[[paysafe.wallet]]
+payment_method_type = "apple_pay"
+
 [paysafe.connector_auth.BodyKey]
 api_key = "Username"
 key1 = "Password"
+
 [paysafe.connector_webhook_details]
 merchant_secret = "Source verification key"
+
 [[paysafe.metadata.account_id.card.USD.three_ds]]
 name="three_ds"
 label="ThreeDS account id"
@@ -6929,7 +6934,70 @@ placeholder="Enter eur Account ID"
 required=true
 type="Text"
 
+[[paysafe.metadata.account_id.apple_pay.USD.encrypt]]
+name="encrypt"
+label="Encrypt"
+placeholder="Enter encrypt value"
+required=true
+type="Text"
+[[paysafe.metadata.account_id.apple_pay.USD.decrypt]]
+name="decrypt"
+label="Decrypt"
+placeholder="Enter decrypt value"
+required=true
+type="Text"
 
+[[paysafe.metadata.apple_pay]]
+name="certificate"
+label="Merchant Certificate (Base64 Encoded)"
+placeholder="Enter Merchant Certificate (Base64 Encoded)"
+required=true
+type="Text"
+[[paysafe.metadata.apple_pay]]
+name="certificate_keys"
+label="Merchant PrivateKey (Base64 Encoded)"
+placeholder="Enter Merchant PrivateKey (Base64 Encoded)"
+required=true
+type="Text"
+[[paysafe.metadata.apple_pay]]
+name="merchant_identifier"
+label="Apple Merchant Identifier"
+placeholder="Enter Apple Merchant Identifier"
+required=true
+type="Text"
+[[paysafe.metadata.apple_pay]]
+name="display_name"
+label="Display Name"
+placeholder="Enter Display Name"
+required=true
+type="Text"
+[[paysafe.metadata.apple_pay]]
+name="initiative"
+label="Domain"
+placeholder="Enter Domain"
+required=true
+type="Select"
+options=["web","ios"]
+[[paysafe.metadata.apple_pay]]
+name="initiative_context"
+label="Domain Name"
+placeholder="Enter Domain Name"
+required=true
+type="Text"
+[[paysafe.metadata.apple_pay]]
+name="merchant_business_country"
+label="Merchant Business Country"
+placeholder="Enter Merchant Business Country"
+required=true
+type="Select"
+options=[]
+[[paysafe.metadata.apple_pay]]
+name="payment_processing_details_at"
+label="Payment Processing Details At"
+placeholder="Enter Payment Processing Details At"
+required=true
+type="Radio"
+options=["Connector","Hyperswitch"]
 
 [peachpayments]
 [[peachpayments.credit]]
diff --git a/crates/hyperswitch_connectors/src/connectors/paysafe.rs b/crates/hyperswitch_connectors/src/connectors/paysafe.rs
index df996434c78..c59149f37ff 100644
--- a/crates/hyperswitch_connectors/src/connectors/paysafe.rs
+++ b/crates/hyperswitch_connectors/src/connectors/paysafe.rs
@@ -342,6 +342,11 @@ impl ConnectorIntegration<Authorize, PaymentsAuthorizeData, PaymentsResponseData
             enums::PaymentMethod::Card if !req.is_three_ds() => {
                 Ok(format!("{}v1/payments", self.base_url(connectors)))
             }
+            enums::PaymentMethod::Wallet
+                if req.request.payment_method_type == Some(enums::PaymentMethodType::ApplePay) =>
+            {
+                Ok(format!("{}v1/payments", self.base_url(connectors)))
+            }
             _ => Ok(format!("{}v1/paymenthandles", self.base_url(connectors),)),
         }
     }
@@ -365,6 +370,13 @@ impl ConnectorIntegration<Authorize, PaymentsAuthorizeData, PaymentsResponseData
                     paysafe::PaysafePaymentsRequest::try_from(&connector_router_data)?;
                 Ok(RequestContent::Json(Box::new(connector_req)))
             }
+            enums::PaymentMethod::Wallet
+                if req.request.payment_method_type == Some(enums::PaymentMethodType::ApplePay) =>
+            {
+                let connector_req =
+                    paysafe::PaysafePaymentsRequest::try_from(&connector_router_data)?;
+                Ok(RequestContent::Json(Box::new(connector_req)))
+            }
             _ => {
                 let connector_req =
                     paysafe::PaysafePaymentHandleRequest::try_from(&connector_router_data)?;
@@ -415,6 +427,21 @@ impl ConnectorIntegration<Authorize, PaymentsAuthorizeData, PaymentsResponseData
                     http_code: res.status_code,
                 })
             }
+            enums::PaymentMethod::Wallet
+                if data.request.payment_method_type == Some(enums::PaymentMethodType::ApplePay) =>
+            {
+                let response: paysafe::PaysafePaymentsResponse = res
+                    .response
+                    .parse_struct("Paysafe PaymentsAuthorizeResponse")
+                    .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
+                event_builder.map(|i| i.set_response_body(&response));
+                router_env::logger::info!(connector_response=?response);
+                RouterData::try_from(ResponseRouterData {
+                    response,
+                    data: data.clone(),
+                    http_code: res.status_code,
+                })
+            }
             _ => {
                 let response: paysafe::PaysafePaymentHandleResponse = res
                     .response
@@ -1029,6 +1056,17 @@ static PAYSAFE_SUPPORTED_PAYMENT_METHODS: LazyLock<SupportedPaymentMethods> = La
         },
     );
 
+    paysafe_supported_payment_methods.add(
+        enums::PaymentMethod::Wallet,
+        enums::PaymentMethodType::ApplePay,
+        PaymentMethodDetails {
+            mandates: enums::FeatureStatus::NotSupported,
+            refunds: enums::FeatureStatus::Supported,
+            supported_capture_methods: supported_capture_methods.clone(),
+            specific_features: None,
+        },
+    );
+
     paysafe_supported_payment_methods.add(
         enums::PaymentMethod::Wallet,
         enums::PaymentMethodType::Skrill,
diff --git a/crates/hyperswitch_connectors/src/connectors/paysafe/transformers.rs b/crates/hyperswitch_connectors/src/connectors/paysafe/transformers.rs
index 8a091a7aec2..5077aae085c 100644
--- a/crates/hyperswitch_connectors/src/connectors/paysafe/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/paysafe/transformers.rs
@@ -1,7 +1,9 @@
 use std::collections::HashMap;
 
+use base64::Engine;
 use cards::CardNumber;
 use common_enums::{enums, Currency};
+use common_types::payments::{ApplePayPaymentData, ApplePayPredecryptData};
 use common_utils::{
     id_type,
     pii::{Email, IpAddress, SecretSerdeValue},
@@ -10,8 +12,10 @@ use common_utils::{
 };
 use error_stack::ResultExt;
 use hyperswitch_domain_models::{
-    payment_method_data::{BankRedirectData, GiftCardData, PaymentMethodData, WalletData},
-    router_data::{ConnectorAuthType, RouterData},
+    payment_method_data::{
+        ApplePayWalletData, BankRedirectData, GiftCardData, PaymentMethodData, WalletData,
+    },
+    router_data::{ConnectorAuthType, PaymentMethodToken, RouterData},
     router_flow_types::refunds::{Execute, RSync},
     router_request_types::{
         CompleteAuthorizeData, PaymentsAuthorizeData, PaymentsPreProcessingData, PaymentsSyncData,
@@ -30,8 +34,9 @@ use serde::{Deserialize, Serialize};
 use crate::{
     types::{RefundsResponseRouterData, ResponseRouterData},
     utils::{
-        self, to_connector_meta, BrowserInformationData, CardData, PaymentsAuthorizeRequestData,
-        PaymentsCompleteAuthorizeRequestData, PaymentsPreProcessingRequestData, RouterData as _,
+        self, missing_field_err, to_connector_meta, BrowserInformationData, CardData,
+        PaymentsAuthorizeRequestData, PaymentsCompleteAuthorizeRequestData,
+        PaymentsPreProcessingRequestData, RouterData as _,
     },
 };
 
@@ -56,10 +61,11 @@ pub struct PaysafeConnectorMetadataObject {
 
 #[derive(Debug, Default, Serialize, Deserialize)]
 pub struct PaysafePaymentMethodDetails {
+    pub apple_pay: Option<HashMap<Currency, ApplePayAccountDetails>>,
     pub card: Option<HashMap<Currency, CardAccountId>>,
-    pub skrill: Option<HashMap<Currency, RedirectAccountId>>,
     pub interac: Option<HashMap<Currency, RedirectAccountId>>,
     pub pay_safe_card: Option<HashMap<Currency, RedirectAccountId>>,
+    pub skrill: Option<HashMap<Currency, RedirectAccountId>>,
 }
 
 #[derive(Debug, Default, Serialize, Deserialize)]
@@ -68,6 +74,12 @@ pub struct CardAccountId {
     three_ds: Option<Secret<String>>,
 }
 
+#[derive(Debug, Default, Serialize, Deserialize)]
+pub struct ApplePayAccountDetails {
+    encrypt: Option<Secret<String>>,
+    decrypt: Option<Secret<String>>,
+}
+
 #[derive(Debug, Default, Serialize, Deserialize)]
 pub struct RedirectAccountId {
     three_ds: Option<Secret<String>>,
@@ -151,12 +163,13 @@ pub struct PaysafeProfile {
 #[serde(rename_all = "camelCase")]
 #[serde(untagged)]
 pub enum PaysafePaymentMethod {
+    ApplePay {
+        #[serde(rename = "applePay")]
+        apple_pay: Box<PaysafeApplepayPayment>,
+    },
     Card {
         card: PaysafeCard,
     },
-    Skrill {
-        skrill: SkrillWallet,
-    },
     Interac {
         #[serde(rename = "interacEtransfer")]
         interac_etransfer: InteracBankRedirect,
@@ -165,6 +178,119 @@ pub enum PaysafePaymentMethod {
         #[serde(rename = "paysafecard")]
         pay_safe_card: PaysafeGiftCard,
     },
+    Skrill {
+        skrill: SkrillWallet,
+    },
+}
+
+#[derive(Debug, Eq, PartialEq, Serialize)]
+#[serde(rename_all = "camelCase")]
+pub struct PaysafeApplepayPayment {
+    pub label: Option<String>,
+    pub request_billing_address: Option<bool>,
+    #[serde(rename = "applePayPaymentToken")]
+    pub apple_pay_payment_token: PaysafeApplePayPaymentToken,
+}
+
+#[derive(Debug, Eq, PartialEq, Serialize)]
+#[serde(rename_all = "camelCase")]
+pub struct PaysafeApplePayPaymentToken {
+    pub token: PaysafeApplePayToken,
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub billing_contact: Option<PaysafeApplePayBillingContact>,
+}
+
+#[derive(Debug, Eq, PartialEq, Serialize)]
+#[serde(rename_all = "camelCase")]
+pub struct PaysafeApplePayToken {
+    pub payment_data: PaysafeApplePayPaymentData,
+    pub payment_method: PaysafeApplePayPaymentMethod,
+    pub transaction_identifier: String,
+}
+
+#[derive(Debug, Eq, PartialEq, Serialize)]
+#[serde(untagged)]
+pub enum PaysafeApplePayPaymentData {
+    Encrypted(PaysafeApplePayEncryptedData),
+    Decrypted(PaysafeApplePayDecryptedDataWrapper),
+}
+
+#[derive(Debug, Eq, PartialEq, Serialize)]
+#[serde(rename_all = "camelCase")]
+pub struct PaysafeApplePayEncryptedData {
+    pub data: Secret<String>,
+    pub signature: Secret<String>,
+    pub header: PaysafeApplePayHeader,
+    pub version: Secret<String>,
+}
+
+#[derive(Debug, Eq, PartialEq, Serialize)]
+#[serde(rename_all = "camelCase")]
+pub struct PaysafeApplePayDecryptedDataWrapper {
+    pub decrypted_data: PaysafeApplePayDecryptedData,
+}
+
+#[derive(Debug, Eq, PartialEq, Serialize)]
+#[serde(rename_all = "camelCase")]
+pub struct PaysafeApplePayDecryptedData {
+    pub application_primary_account_number: CardNumber,
+    pub application_expiration_date: Secret<String>,
+    pub currency_code: String,
+    pub transaction_amount: Option<MinorUnit>,
+    pub cardholder_name: Option<Secret<String>>,
+    pub device_manufacturer_identifier: Option<String>,
+    pub payment_data_type: Option<String>,
+    pub payment_data: PaysafeApplePayDecryptedPaymentData,
+}
+
+#[derive(Debug, Eq, PartialEq, Serialize)]
+#[serde(rename_all = "camelCase")]
+pub struct PaysafeApplePayDecryptedPaymentData {
+    pub online_payment_cryptogram: Secret<String>,
+    pub eci_indicator: String,
+}
+
+#[derive(Debug, Eq, PartialEq, Serialize)]
+#[serde(rename_all = "camelCase")]
+pub struct PaysafeApplePayHeader {
+    pub public_key_hash: String,
+    pub ephemeral_public_key: String,
+    pub transaction_id: String,
+}
+
+#[derive(Debug, Eq, PartialEq, Serialize)]
+#[serde(rename_all = "camelCase")]
+pub struct PaysafeApplePayPaymentMethod {
+    pub display_name: Secret<String>,
+    pub network: Secret<String>,
+    #[serde(rename = "type")]
+    pub method_type: Secret<String>,
+}
+
+#[derive(Debug, Eq, PartialEq, Serialize)]
+#[serde(rename_all = "camelCase")]
+pub struct PaysafeApplePayBillingContact {
+    pub address_lines: Vec<Option<Secret<String>>>,
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub administrative_area: Option<Secret<String>>,
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub country: Option<String>,
+    pub country_code: api_models::enums::CountryAlpha2,
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub family_name: Option<Secret<String>>,
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub given_name: Option<Secret<String>>,
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub locality: Option<Secret<String>>,
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub phonetic_family_name: Option<Secret<String>>,
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub phonetic_given_name: Option<Secret<String>>,
+    pub postal_code: Secret<String>,
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub sub_administrative_area: Option<Secret<String>>,
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub sub_locality: Option<Secret<String>>,
 }
 
 #[derive(Debug, Serialize, Clone, PartialEq)]
@@ -205,6 +331,7 @@ pub enum LinkType {
 #[derive(Debug, Serialize)]
 #[serde(rename_all = "SCREAMING_SNAKE_CASE")]
 pub enum PaysafePaymentType {
+    // For Apple Pay and Google Pay, paymentType is 'CARD' as per Paysafe docs and is not reserved for card payments only
     Card,
     Skrill,
     InteracEtransfer,
@@ -218,6 +345,32 @@ pub enum TransactionType {
 }
 
 impl PaysafePaymentMethodDetails {
+    pub fn get_applepay_encrypt_account_id(
+        &self,
+        currency: Currency,
+    ) -> Result<Secret<String>, errors::ConnectorError> {
+        self.apple_pay
+            .as_ref()
+            .and_then(|apple_pay| apple_pay.get(&currency))
+            .and_then(|flow| flow.encrypt.clone())
+            .ok_or_else(|| errors::ConnectorError::InvalidConnectorConfig {
+                config: "Missing ApplePay encrypt account_id",
+            })
+    }
+
+    pub fn get_applepay_decrypt_account_id(
+        &self,
+        currency: Currency,
+    ) -> Result<Secret<String>, errors::ConnectorError> {
+        self.apple_pay
+            .as_ref()
+            .and_then(|apple_pay| apple_pay.get(&currency))
+            .and_then(|flow| flow.decrypt.clone())
+            .ok_or_else(|| errors::ConnectorError::InvalidConnectorConfig {
+                config: "Missing ApplePay decrypt account_id",
+            })
+    }
+
     pub fn get_no_three_ds_account_id(
         &self,
         currency: Currency,
@@ -289,84 +442,149 @@ impl TryFrom<&PaysafeRouterData<&PaymentsPreProcessingRouterData>> for PaysafePa
     fn try_from(
         item: &PaysafeRouterData<&PaymentsPreProcessingRouterData>,
     ) -> Result<Self, Self::Error> {
-        if item.router_data.is_three_ds() {
-            Err(errors::ConnectorError::NotSupported {
-                message: "Card 3DS".to_string(),
-                connector: "Paysafe",
-            })?
-        };
         let metadata: PaysafeConnectorMetadataObject =
             utils::to_connector_meta_from_secret(item.router_data.connector_meta_data.clone())
                 .change_context(errors::ConnectorError::InvalidConnectorConfig {
                     config: "merchant_connector_account.metadata",
                 })?;
-        let currency = item.router_data.request.get_currency()?;
-        match item.router_data.request.get_payment_method_data()?.clone() {
-            PaymentMethodData::Card(req_card) => {
-                let card = PaysafeCard {
-                    card_num: req_card.card_number.clone(),
-                    card_expiry: PaysafeCardExpiry {
-                        month: req_card.card_exp_month.clone(),
-                        year: req_card.get_expiry_year_4_digit(),
-                    },
-                    cvv: if req_card.card_cvc.clone().expose().is_empty() {
-                        None
-                    } else {
-                        Some(req_card.card_cvc.clone())
-                    },
-                    holder_name: item.router_data.get_optional_billing_full_name(),
-                };
-
-                let payment_method = PaysafePaymentMethod::Card { card: card.clone() };
-                let account_id = metadata.account_id.get_no_three_ds_account_id(currency)?;
-                let amount = item.amount;
-                let payment_type = PaysafePaymentType::Card;
-                let transaction_type = TransactionType::Payment;
-                let redirect_url = item.router_data.request.get_router_return_url()?;
-                let return_links = vec![
-                    ReturnLink {
-                        rel: LinkType::Default,
-                        href: redirect_url.clone(),
-                        method: Method::Get.to_string(),
-                    },
-                    ReturnLink {
-                        rel: LinkType::OnCompleted,
-                        href: redirect_url.clone(),
-                        method: Method::Get.to_string(),
-                    },
-                    ReturnLink {
-                        rel: LinkType::OnFailed,
-                        href: redirect_url.clone(),
-                        method: Method::Get.to_string(),
-                    },
-                    ReturnLink {
-                        rel: LinkType::OnCancelled,
-                        href: redirect_url.clone(),
-                        method: Method::Get.to_string(),
-                    },
-                ];
-
-                Ok(Self {
-                    merchant_ref_num: item.router_data.connector_request_reference_id.clone(),
-                    amount,
-                    settle_with_auth: matches!(
-                        item.router_data.request.capture_method,
-                        Some(enums::CaptureMethod::Automatic) | None
-                    ),
-                    payment_method,
-                    currency_code: currency,
-                    payment_type,
-                    transaction_type,
-                    return_links,
-                    account_id,
-                    three_ds: None,
-                    profile: None,
-                })
-            }
-            _ => Err(errors::ConnectorError::NotImplemented(
-                "Payment Method".to_string(),
-            ))?,
-        }
+
+        let amount = item.amount;
+        let currency_code = item.router_data.request.get_currency()?;
+        let redirect_url = item.router_data.request.get_router_return_url()?;
+        let return_links = vec![
+            ReturnLink {
+                rel: LinkType::Default,
+                href: redirect_url.clone(),
+                method: Method::Get.to_string(),
+            },
+            ReturnLink {
+                rel: LinkType::OnCompleted,
+                href: redirect_url.clone(),
+                method: Method::Get.to_string(),
+            },
+            ReturnLink {
+                rel: LinkType::OnFailed,
+                href: redirect_url.clone(),
+                method: Method::Get.to_string(),
+            },
+            ReturnLink {
+                rel: LinkType::OnCancelled,
+                href: redirect_url.clone(),
+                method: Method::Get.to_string(),
+            },
+        ];
+        let settle_with_auth = matches!(
+            item.router_data.request.capture_method,
+            Some(enums::CaptureMethod::Automatic) | None
+        );
+        let transaction_type = TransactionType::Payment;
+
+        let (payment_method, payment_type, account_id) =
+            match item.router_data.request.get_payment_method_data()?.clone() {
+                PaymentMethodData::Card(req_card) => {
+                    let card = PaysafeCard {
+                        card_num: req_card.card_number.clone(),
+                        card_expiry: PaysafeCardExpiry {
+                            month: req_card.card_exp_month.clone(),
+                            year: req_card.get_expiry_year_4_digit(),
+                        },
+                        cvv: if req_card.card_cvc.clone().expose().is_empty() {
+                            None
+                        } else {
+                            Some(req_card.card_cvc.clone())
+                        },
+                        holder_name: item.router_data.get_optional_billing_full_name(),
+                    };
+
+                    let payment_method = PaysafePaymentMethod::Card { card: card.clone() };
+                    let payment_type = PaysafePaymentType::Card;
+                    let account_id = metadata
+                        .account_id
+                        .get_no_three_ds_account_id(currency_code)?;
+                    (payment_method, payment_type, account_id)
+                }
+                PaymentMethodData::Wallet(wallet_data) => match wallet_data {
+                    WalletData::ApplePay(applepay_data) => {
+                        let is_encrypted = matches!(
+                            applepay_data.payment_data,
+                            ApplePayPaymentData::Encrypted(_)
+                        );
+
+                        let account_id = if is_encrypted {
+                            metadata
+                                .account_id
+                                .get_applepay_encrypt_account_id(currency_code)?
+                        } else {
+                            metadata
+                                .account_id
+                                .get_applepay_decrypt_account_id(currency_code)?
+                        };
+
+                        let applepay_payment =
+                            PaysafeApplepayPayment::try_from((&applepay_data, item))?;
+
+                        let payment_method = PaysafePaymentMethod::ApplePay {
+                            apple_pay: Box::new(applepay_payment),
+                        };
+
+                        let payment_type = PaysafePaymentType::Card;
+
+                        (payment_method, payment_type, account_id)
+                    }
+                    WalletData::AliPayQr(_)
+                    | WalletData::AliPayRedirect(_)
+                    | WalletData::AliPayHkRedirect(_)
+                    | WalletData::AmazonPay(_)
+                    | WalletData::AmazonPayRedirect(_)
+                    | WalletData::Paysera(_)
+                    | WalletData::Skrill(_)
+                    | WalletData::BluecodeRedirect {}
+                    | WalletData::MomoRedirect(_)
+                    | WalletData::KakaoPayRedirect(_)
+                    | WalletData::GoPayRedirect(_)
+                    | WalletData::GcashRedirect(_)
+                    | WalletData::ApplePayRedirect(_)
+                    | WalletData::ApplePayThirdPartySdk(_)
+                    | WalletData::DanaRedirect {}
+                    | WalletData::GooglePayRedirect(_)
+                    | WalletData::GooglePay(_)
+                    | WalletData::GooglePayThirdPartySdk(_)
+                    | WalletData::MbWayRedirect(_)
+                    | WalletData::MobilePayRedirect(_)
+                    | WalletData::PaypalSdk(_)
+                    | WalletData::PaypalRedirect(_)
+                    | WalletData::Paze(_)
+                    | WalletData::SamsungPay(_)
+                    | WalletData::TwintRedirect {}
+                    | WalletData::VippsRedirect {}
+                    | WalletData::TouchNGoRedirect(_)
+                    | WalletData::WeChatPayRedirect(_)
+                    | WalletData::CashappQr(_)
+                    | WalletData::SwishQr(_)
+                    | WalletData::WeChatPayQr(_)
+                    | WalletData::RevolutPay(_)
+                    | WalletData::Mifinity(_) => Err(errors::ConnectorError::NotImplemented(
+                        utils::get_unimplemented_payment_method_error_message("Paysafe"),
+                    ))?,
+                },
+                _ => Err(errors::ConnectorError::NotImplemented(
+                    "Payment Method".to_string(),
+                ))?,
+            };
+
+        Ok(Self {
+            merchant_ref_num: item.router_data.connector_request_reference_id.clone(),
+            amount,
+            settle_with_auth,
+            payment_method,
+            currency_code,
+            payment_type,
+            transaction_type,
+            return_links,
+            account_id,
+            three_ds: None,
+            profile: None,
+        })
     }
 }
 
@@ -441,6 +659,7 @@ impl<F>
         >,
     ) -> Result<Self, Self::Error> {
         Ok(Self {
+            status: enums::AttemptStatus::try_from(item.response.status)?,
             preprocessing_id: Some(
                 item.response
                     .payment_handle_token
@@ -516,15 +735,16 @@ impl<F>
             PaymentsResponseData,
         >,
     ) -> Result<Self, Self::Error> {
-        let url = match item.response.links.as_ref().and_then(|links| links.first()) {
-            Some(link) => link.href.clone(),
-            None => return Err(errors::ConnectorError::ResponseDeserializationFailed)?,
-        };
-        let redirection_data = Some(RedirectForm::Form {
-            endpoint: url,
-            method: Method::Get,
-            form_fields: Default::default(),
-        });
+        let redirection_data = item
+            .response
+            .links
+            .as_ref()
+            .and_then(|links| links.first())
+            .map(|link| RedirectForm::Form {
+                endpoint: link.href.clone(),
+                method: Method::Get,
+                form_fields: Default::default(),
+            });
         let connector_metadata = serde_json::json!(PaysafeMeta {
             payment_handle_token: item.response.payment_handle_token.clone(),
         });
@@ -572,6 +792,159 @@ pub struct PaysafeCardExpiry {
     pub year: Secret<String>,
 }
 
+#[derive(Debug, Deserialize)]
+struct DecryptedApplePayTokenData {
+    data: Secret<String>,
+    signature: Secret<String>,
+    header: DecryptedApplePayTokenHeader,
+    version: Secret<String>,
+}
+
+#[derive(Debug, Deserialize)]
+#[serde(rename_all = "camelCase")]
+struct DecryptedApplePayTokenHeader {
+    public_key_hash: String,
+    ephemeral_public_key: String,
+    transaction_id: String,
+}
+
+fn get_apple_pay_decrypt_data(
+    apple_pay_predecrypt_data: &ApplePayPredecryptData,
+    item: &PaysafeRouterData<&PaymentsPreProcessingRouterData>,
+) -> Result<PaysafeApplePayDecryptedData, error_stack::Report<errors::ConnectorError>> {
+    Ok(PaysafeApplePayDecryptedData {
+        application_primary_account_number: apple_pay_predecrypt_data
+            .application_primary_account_number
+            .clone(),
+        application_expiration_date: apple_pay_predecrypt_data
+            .get_expiry_date_as_yymm()
+            .change_context(errors::ConnectorError::InvalidDataFormat {
+                field_name: "application_expiration_date",
+            })?,
+        currency_code: Currency::iso_4217(
+            item.router_data
+                .request
+                .currency
+                .ok_or_else(missing_field_err("currency"))?,
+        )
+        .to_string(),
+
+        transaction_amount: Some(item.amount),
+        cardholder_name: None,
+        device_manufacturer_identifier: Some("Apple".to_string()),
+        payment_data_type: Some("3DSecure".to_string()),
+        payment_data: PaysafeApplePayDecryptedPaymentData {
+            online_payment_cryptogram: apple_pay_predecrypt_data
+                .payment_data
+                .online_payment_cryptogram
+                .clone(),
+            eci_indicator: apple_pay_predecrypt_data
+                .payment_data
+                .eci_indicator
+                .clone()
+                .ok_or_else(missing_field_err(
+                    "payment_method_data.wallet.apple_pay.payment_data.eci_indicator",
+                ))?,
+        },
+    })
+}
+
+impl
+    TryFrom<(
+        &ApplePayWalletData,
+        &PaysafeRouterData<&PaymentsPreProcessingRouterData>,
+    )> for PaysafeApplepayPayment
+{
+    type Error = error_stack::Report<errors::ConnectorError>;
+    fn try_from(
+        (wallet_data, item): (
+            &ApplePayWalletData,
+            &PaysafeRouterData<&PaymentsPreProcessingRouterData>,
+        ),
+    ) -> Result<Self, Self::Error> {
+        let apple_pay_payment_token = PaysafeApplePayPaymentToken {
+            token: PaysafeApplePayToken {
+                payment_data: if let Ok(PaymentMethodToken::ApplePayDecrypt(ref token)) =
+                    item.router_data.get_payment_method_token()
+                {
+                    PaysafeApplePayPaymentData::Decrypted(PaysafeApplePayDecryptedDataWrapper {
+                        decrypted_data: get_apple_pay_decrypt_data(token, item)?,
+                    })
+                } else {
+                    match &wallet_data.payment_data {
+                        ApplePayPaymentData::Decrypted(applepay_predecrypt_data) => {
+                            PaysafeApplePayPaymentData::Decrypted(
+                                PaysafeApplePayDecryptedDataWrapper {
+                                    decrypted_data: get_apple_pay_decrypt_data(
+                                        applepay_predecrypt_data,
+                                        item,
+                                    )?,
+                                },
+                            )
+                        }
+                        ApplePayPaymentData::Encrypted(applepay_encrypt_data) => {
+                            let decoded_data = base64::prelude::BASE64_STANDARD
+                                .decode(applepay_encrypt_data)
+                                .change_context(errors::ConnectorError::InvalidDataFormat {
+                                    field_name: "apple_pay_encrypted_data",
+                                })?;
+
+                            let apple_pay_token: DecryptedApplePayTokenData =
+                                serde_json::from_slice(&decoded_data).change_context(
+                                    errors::ConnectorError::InvalidDataFormat {
+                                        field_name: "apple_pay_token_json",
+                                    },
+                                )?;
+
+                            PaysafeApplePayPaymentData::Encrypted(PaysafeApplePayEncryptedData {
+                                data: apple_pay_token.data,
+                                signature: apple_pay_token.signature,
+                                header: PaysafeApplePayHeader {
+                                    public_key_hash: apple_pay_token.header.public_key_hash,
+                                    ephemeral_public_key: apple_pay_token
+                                        .header
+                                        .ephemeral_public_key,
+                                    transaction_id: apple_pay_token.header.transaction_id,
+                                },
+                                version: apple_pay_token.version,
+                            })
+                        }
+                    }
+                },
+                payment_method: PaysafeApplePayPaymentMethod {
+                    display_name: Secret::new(wallet_data.payment_method.display_name.clone()),
+                    network: Secret::new(wallet_data.payment_method.network.clone()),
+                    method_type: Secret::new(wallet_data.payment_method.pm_type.clone()),
+                },
+                transaction_identifier: wallet_data.transaction_identifier.clone(),
+            },
+            billing_contact: Some(PaysafeApplePayBillingContact {
+                address_lines: vec![
+                    item.router_data.get_optional_billing_line1(),
+                    item.router_data.get_optional_billing_line2(),
+                ],
+                postal_code: item.router_data.get_billing_zip()?,
+                country_code: item.router_data.get_billing_country()?,
+                country: None,
+                family_name: None,
+                given_name: None,
+                locality: None,
+                phonetic_family_name: None,
+                phonetic_given_name: None,
+                sub_administrative_area: None,
+                administrative_area: None,
+                sub_locality: None,
+            }),
+        };
+
+        Ok(Self {
+            label: None,
+            request_billing_address: Some(false),
+            apple_pay_payment_token,
+        })
+    }
+}
+
 impl TryFrom<&PaysafeRouterData<&PaymentsAuthorizeRouterData>> for PaysafePaymentsRequest {
     type Error = error_stack::Report<errors::ConnectorError>;
     fn try_from(
diff --git a/crates/payment_methods/src/configs/payment_connector_required_fields.rs b/crates/payment_methods/src/configs/payment_connector_required_fields.rs
index bfb3e36b291..eccd9b02b37 100644
--- a/crates/payment_methods/src/configs/payment_connector_required_fields.rs
+++ b/crates/payment_methods/src/configs/payment_connector_required_fields.rs
@@ -2393,6 +2393,17 @@ fn get_wallet_required_fields() -> HashMap<enums::PaymentMethodType, ConnectorFi
                     Connector::Novalnet,
                     fields(vec![], vec![], vec![RequiredField::BillingEmail]),
                 ),
+                (
+                    Connector::Paysafe,
+                    RequiredFieldFinal {
+                        mandate: HashMap::new(),
+                        non_mandate: HashMap::new(),
+                        common: HashMap::from([
+                            RequiredField::BillingAddressZip.to_tuple(),
+                            RequiredField::BillingAddressCountries(vec!["ALL"]).to_tuple(),
+                        ]),
+                    },
+                ),
                 (
                     Connector::Wellsfargo,
                     RequiredFieldFinal {
diff --git a/crates/router/src/core/payments.rs b/crates/router/src/core/payments.rs
index 56db1b8d080..19faac6084c 100644
--- a/crates/router/src/core/payments.rs
+++ b/crates/router/src/core/payments.rs
@@ -6567,6 +6567,12 @@ where
                     router_data.preprocessing_steps(state, connector).await?,
                     false,
                 )
+            } else if connector.connector_name == router_types::Connector::Paysafe {
+                router_data = router_data.preprocessing_steps(state, connector).await?;
+
+                let is_error_in_response = router_data.response.is_err();
+                // If is_error_in_response is true, should_continue_payment should be false, we should throw the error
+                (router_data, !is_error_in_response)
             } else {
                 (router_data, should_continue_payment)
             }
diff --git a/loadtest/config/development.toml b/loadtest/config/development.toml
index cd4fe3fc8c0..cb25fa4c830 100644
--- a/loadtest/config/development.toml
+++ b/loadtest/config/development.toml
@@ -680,6 +680,9 @@ credit = { country = "US,CA,IL,GB", currency = "ILS,USD,EUR" }
 debit = { country = "US,CA,IL,GB", currency = "ILS,USD,EUR" }
 apple_pay = { country = "US,CA,IL,GB", currency = "ILS,USD,EUR" }
 
+[pm_filters.paysafe]
+apple_pay = {country = "AF,AX,AL,DZ,AS,AD,AO,AI,AQ,AG,AR,AM,AW,AU,AT,AZ,BS,BH,BD,BB,BY,BE,BZ,BJ,BM,BT,BO,BQ,BA,BW,BV,BR,IO,BN,BG,BF,BI,KH,CM,CA,CV,KY,CF,TD,CL,CN,CX,CC,CO,KM,CG,CD,CK,CR,CI,HR,CU,CW,CY,CZ,DK,DJ,DM,DO,EC,EG,SV,GQ,ER,EE,ET,FK,FO,FJ,FI,FR,GF,PF,TF,GA,GM,GE,DE,GH,GI,GR,GL,GD,GP,GU,GT,GG,GN,GW,GY,HT,HM,HN,HK,HU,IS,IN,ID,IR,IQ,IE,IM,IL,IT,JM,JP,JE,JO,KZ,KE,KI,KP,KR,KW,KG,LA,LV,LB,LS,LR,LY,LI,LT,LU,MO,MK,MG,MW,MY,MV,ML,MT,MH,MQ,MR,MU,YT,MX,FM,MD,MC,MN,ME,MS,MA,MZ,MM,NA,NR,NP,NC,NZ,NI,NE,NG,NU,NF,MP,NO,OM,PK,PW,PS,PA,PG,PY,PE,PH,PN,PL,PT,PR,QA,RE,RO,RU,RW,BL,SH,KN,LC,MF,VC,WS,SM,ST,SA,SN,RS,SC,SL,SG,SX,SK,SI,SB,SO,ZA,GS,SS,ES,LK,PM,SD,SR,SJ,SZ,SE,CH,SY,TW,TJ,TZ,TH,NL,TL,TG,TK,TO,TT,TN,TR,TM,TC,TV,UG,UA,AE,GB,US,UM,UY,UZ,VU,VA,VE,VN,VG,VI,WF,EH,YE,ZM,ZW", currency = "ARS,AUD,AZN,BHD,BOB,BAM,BRL,BGN,CAD,CLP,CNY,COP,CRC,HRK,CZK,DKK,DOP,XCD,EGP,ETB,EUR,FJD,GEL,GTQ,HTG,HNL,HKD,HUF,INR,IDR,JMD,JPY,JOD,KZT,KES,KRW,KWD,LBP,LYD,MWK,MUR,MXN,MDL,MAD,ILS,NZD,NGN,NOK,OMR,PKR,PAB,PYG,PEN,PHP,PLN,GBP,QAR,RON,RUB,RWF,SAR,RSD,SGD,ZAR,LKR,SEK,CHF,SYP,TWD,THB,TTD,TND,TRY,UAH,AED,UYU,USD,VND" }
+
 #tokenization configuration which describe token lifetime and payment method for specific connector
 [tokenization]
 stripe = { long_lived_token = false, payment_method = "wallet", payment_method_type = { type = "disable_only", list = "google_pay" } }

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

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

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

this pr adds comprehensive apple pay support to the paysafe connector, enabling merchants to process apple pay transactions through paysafe's payment gateway

- dynamic account id detection for apple pay for both encrypt and decrypt flows
- payment via apple pay in paysafe happens in 2 steps:
  - payment initiate: hits `/paymenthandles` endpoint (happens in preprocessing step) with all the necessary apple data
  - payment confirm: hits `/payments` endpoint with the payment handle token to complete the payment

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

the pr includes connector metadata enhancements and preprocessing flow modifications.

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

expanding payment method support to include apple pay for paysafe connector.

## How did you test it?
<!--
Did you write an integration/unit/API test to verify the code changes?
Or did you test this change manually (provide relevant screenshots)?
-->

>[!NOTE]
> To test it locally, the base URL should be `https` and not `http`. 

<details>

<summary>MCA</summary>

```bash
curl --location 'https://base_url/account/postman_merchant_GHAction_1757583450/connectors' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_Pvdq3IlcMf857bnbRpKevrNjeNEvoU7e66n5nwBHCCcsI9mSzrtyafBeQ7FuKArE' \
--data '{
	"connector_type": "payment_processor",
	"connector_name": "paysafe",
	"business_country": "US",
	"business_label": "default",
	"connector_account_details": {
		"auth_type": "BodyKey",
		"api_key": "api_key",
		"key1": "key1"
	},
	"test_mode": false,
	"disabled": false,
	"payment_methods_enabled": [
		{
			"payment_method": "card",
			"payment_method_types": [
				{
					"payment_method_type": "credit",
					"minimum_amount": 1,
					"maximum_amount": 68607706,
					"recurring_enabled": true,
					"installment_payment_enabled": true,
					"card_networks": [
						"AmericanExpress",
						"Discover",
						"Interac",
						"JCB",
						"Mastercard",
						"Visa",
						"DinersClub",
						"UnionPay",
						"RuPay"
					]
				},
				{
					"payment_method_type": "debit",
					"minimum_amount": 1,
					"maximum_amount": 68607706,
					"recurring_enabled": true,
					"installment_payment_enabled": true,
					"card_networks": [
						"AmericanExpress",
						"Discover",
						"Interac",
						"JCB",
						"Mastercard",
						"Visa",
						"DinersClub",
						"UnionPay",
						"RuPay"
					]
				}
			]
		},
		{
			"payment_method": "wallet",
			"payment_method_types": [
				{
					"payment_method_type": "apple_pay",
					"payment_experience": "invoke_sdk_client",
					"card_networks": null,
					"accepted_currencies": null,
					"accepted_countries": null,
					"minimum_amount": 1,
					"maximum_amount": 68607706,
					"recurring_enabled": true,
					"installment_payment_enabled": true
				}
			]
		}
	],
	"metadata": {
		"account_id": {
			"apple_pay": {
				"USD": {
					"encrypt": "1003013960",
					"decrypt": "1003013960"
				}
			}
		},
		"apple_pay_combined": {
			"manual": {
				"payment_request_data": {
					"supported_networks": [
						"visa",
						"masterCard",
						"amex",
						"discover"
					],
					"merchant_capabilities": [
						"supports3DS"
					],
					"label": "apple"
				},
				"session_token_data": {
					"certificate": "certificate",
					"certificate_keys": "certificate_keys",
					"merchant_identifier": "merchant.merchant.identifier",
					"display_name": "Apple Pay",
					"initiative": "web",
					"initiative_context": "example.com",
					"merchant_business_country": "US",
					"payment_processing_details_at": "Connector"
				}
			}
		}
	},
	"additional_merchant_data": null,
	"status": "active",
	"pm_auth_config": null,
	"connector_wallets_details": {
		"apple_pay_combined": {
			"manual": {
				"payment_request_data": {
					"supported_networks": [
						"visa",
						"masterCard",
						"amex",
						"discover"
					],
					"merchant_capabilities": [
						"supports3DS"
					],
					"label": "apple"
				},
				"session_token_data": {
					"certificate": "certificate",
					"certificate_keys": "certificate_keys",
					"display_name": "Apple Pay",
					"initiative": "web",
					"initiative_context": "example.com",
					"merchant_business_country": "US",
					"payment_processing_details_at": "Connector"
				}
			}
		}
	}
}'
```
```json
{
	"connector_type": "payment_processor",
	"connector_name": "paysafe",
	"connector_label": "paysafe_US_default",
	"merchant_connector_id": "mca_IpxHuANMVZ1qWbcGRcil",
	"profile_id": "pro_pdMcyhMaLhxejyxdm4Gh",
	"connector_account_details": {
		"auth_type": "BodyKey",
		"api_key": "ap**ey",
		"key1": "k**1"
	},
	"payment_methods_enabled": [
		{
			"payment_method": "card",
			"payment_method_types": [
				{
					"payment_method_type": "credit",
					"payment_experience": null,
					"card_networks": [
						"AmericanExpress",
						"Discover",
						"Interac",
						"JCB",
						"Mastercard",
						"Visa",
						"DinersClub",
						"UnionPay",
						"RuPay"
					],
					"accepted_currencies": null,
					"accepted_countries": null,
					"minimum_amount": 1,
					"maximum_amount": 68607706,
					"recurring_enabled": true,
					"installment_payment_enabled": true
				},
				{
					"payment_method_type": "debit",
					"payment_experience": null,
					"card_networks": [
						"AmericanExpress",
						"Discover",
						"Interac",
						"JCB",
						"Mastercard",
						"Visa",
						"DinersClub",
						"UnionPay",
						"RuPay"
					],
					"accepted_currencies": null,
					"accepted_countries": null,
					"minimum_amount": 1,
					"maximum_amount": 68607706,
					"recurring_enabled": true,
					"installment_payment_enabled": true
				}
			]
		},
		{
			"payment_method": "wallet",
			"payment_method_types": [
				{
					"payment_method_type": "apple_pay",
					"payment_experience": "invoke_sdk_client",
					"card_networks": null,
					"accepted_currencies": null,
					"accepted_countries": null,
					"minimum_amount": 1,
					"maximum_amount": 68607706,
					"recurring_enabled": true,
					"installment_payment_enabled": true
				}
			]
		}
	],
	"connector_webhook_details": null,
	"metadata": {
		"account_id": {
			"card": {
				"USD": {
					"no_three_ds": "123456",
					"three_ds": "123456"
				},
				"EUR": {
					"no_three_ds": "123456",
					"three_ds": "123456"
				}
			},
			"wallet": {
				"apple_pay": {
					"USD": {
						"encrypt": "123456",
						"decrypt": "123456"
					}
				}
			}
		},
		"apple_pay_combined": {
			"manual": {
				"payment_request_data": {
					"supported_networks": [
						"visa",
						"masterCard",
						"amex",
						"discover"
					],
					"merchant_capabilities": [
						"supports3DS"
					],
					"label": "apple"
				},
				"session_token_data": {
					"certificate": "certificate",
					"certificate_keys": "certificate_keys",
					"merchant_identifier": "merchant.merchant.identifier",
					"display_name": "Apple Pay",
					"initiative": "web",
					"initiative_context": "example.com",
					"merchant_business_country": "US",
					"payment_processing_details_at": "Connector"
				}
			}
		}
	},
	"additional_merchant_data": null,
	"status": "active",
	"pm_auth_config": null,
	"connector_wallets_details": {
		"apple_pay_combined": {
			"manual": {
				"payment_request_data": {
					"supported_networks": [
						"visa",
						"masterCard",
						"amex",
						"discover"
					],
					"merchant_capabilities": [
						"supports3DS"
					],
					"label": "apple"
				},
				"session_token_data": {
					"certificate": "certificate",
					"certificate_keys": "certificate_keys",
					"display_name": "Apple Pay",
					"initiative": "web",
					"initiative_context": "example.com",
					"merchant_business_country": "US",
					"payment_processing_details_at": "Connector"
				}
			}
		}
	}
}
```

</details>

<details>

<summary>Payment Initiate</summary>

```bash
curl --location 'https://base_url/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Accept-Language: ja' \
--header 'api-key: dev_easrii6Oqqq9fjnj4AQw7tkdKDf9bfo8cIEa9IfUj8nl7LbLjMQD1cM9UeK6jnLb' \
--data-raw '{
    "amount": 1000,
    "currency": "USD",
    "confirm": false,
    "business_country": "US",
    "business_label": "default",
    "capture_method": "automatic",
    "capture_on": "2022-09-10T10:11:12Z",
    "customer_id": "StripeCustomer",
    "email": "likhin.bopanna@gmail.com",
    "name": "John Doe",
    "phone": "999999999",
    "phone_country_code": "+65",
    "description": "Its my first payment request",
    "authentication_type": "no_three_ds",
    "return_url": "https://duck.com",
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "metadata": {
        "udf1": "value1",
        "new_customer": "true",
        "login_date": "2019-09-10T10:11:12Z"
    }
}'
```
```json
{
	"payment_id": "pay_AOWndR0v1zIfq8T8Ff7h",
	"merchant_id": "postman_merchant_GHAction_1758644632",
	"status": "requires_payment_method",
	"amount": 1000,
	"net_amount": 1000,
	"shipping_cost": null,
	"amount_capturable": 0,
	"amount_received": null,
	"connector": null,
	"client_secret": "pay_AOWndR0v1zIfq8T8Ff7h_secret_Tjst2yhf6Z5Ju7C3fGnT",
	"created": "2025-09-23T17:06:52.717Z",
	"currency": "USD",
	"customer_id": "StripeCustomer",
	"customer": {
		"id": "StripeCustomer",
		"name": "John Doe",
		"email": "likhin.bopanna@gmail.com",
		"phone": "999999999",
		"phone_country_code": "+65"
	},
	"description": "Its my first payment request",
	"refunds": null,
	"disputes": null,
	"mandate_id": null,
	"mandate_data": null,
	"setup_future_usage": null,
	"off_session": null,
	"capture_on": null,
	"capture_method": "automatic",
	"payment_method": null,
	"payment_method_data": null,
	"payment_token": null,
	"shipping": null,
	"billing": null,
	"order_details": null,
	"email": "likhin.bopanna@gmail.com",
	"name": "John Doe",
	"phone": "999999999",
	"return_url": "https://duck.com/",
	"authentication_type": "no_three_ds",
	"statement_descriptor_name": "joseph",
	"statement_descriptor_suffix": "JS",
	"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": "US",
	"business_label": "default",
	"business_sub_label": null,
	"allowed_payment_method_types": null,
	"ephemeral_key": {
		"customer_id": "StripeCustomer",
		"created_at": 1758647212,
		"expires": 1758650812,
		"secret": "epk_aee57839c2554a47bd89f221608987ef"
	},
	"manual_retry_allowed": null,
	"connector_transaction_id": null,
	"frm_message": null,
	"metadata": {
		"udf1": "value1",
		"login_date": "2019-09-10T10:11:12Z",
		"new_customer": "true"
	},
	"connector_metadata": null,
	"feature_metadata": null,
	"reference_id": null,
	"payment_link": null,
	"profile_id": "pro_X9nYDTDvLffn5ZFzovVC",
	"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-09-23T17:21:52.717Z",
	"fingerprint": null,
	"browser_info": null,
	"payment_channel": null,
	"payment_method_id": null,
	"network_transaction_id": null,
	"payment_method_status": null,
	"updated": "2025-09-23T17:06:52.746Z",
	"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,
	"is_iframe_redirection_enabled": null,
	"whole_connector_response": null,
	"enable_partial_authorization": null,
	"enable_overcapture": null,
	"is_overcapture_enabled": null,
	"network_details": null
}
```

</details>

<details>

<summary>Session call</summary>

```bash
curl --location 'https://base_url/payments/session_tokens' \
--header 'Content-Type: application/json' \
--header 'api-key: pk_dev_8bc73f9c3edb44f7b8a4c9f08fa49169' \
--data '{
    "payment_id": "pay_AOWndR0v1zIfq8T8Ff7h",
    "wallets": [],
    "client_secret": "pay_AOWndR0v1zIfq8T8Ff7h_secret_Tjst2yhf6Z5Ju7C3fGnT"
}'
```
```json
{
	"payment_id": "pay_AOWndR0v1zIfq8T8Ff7h",
	"client_secret": "pay_AOWndR0v1zIfq8T8Ff7h_secret_Tjst2yhf6Z5Ju7C3fGnT",
	"session_token": [
		{
			"wallet_name": "apple_pay",
			"session_token_data": {
				"epoch_timestamp": 1758647230798,
				"expires_at": 1758650830798,
				"merchant_session_identifier": "SS..C3",
				"nonce": "3ed97144",
				"merchant_identifier": "8C..C4",
				"domain_name": "hyperswitch.app",
				"display_name": "apple pay",
				"signature": "30..00",
				"operational_analytics_identifier": "apple pay:8C..C4",
				"retries": 0,
				"psp_id": "8C..C4"
			},
			"payment_request_data": {
				"country_code": "US",
				"currency_code": "USD",
				"total": {
					"label": "applepay",
					"type": "final",
					"amount": "10.00"
				},
				"merchant_capabilities": [
					"supports3DS"
				],
				"supported_networks": [
					"visa",
					"masterCard",
					"amex",
					"discover"
				],
				"merchant_identifier": "merchant"
			},
			"connector": "paysafe",
			"delayed_session_token": false,
			"sdk_next_action": {
				"next_action": "confirm"
			},
			"connector_reference_id": null,
			"connector_sdk_public_key": null,
			"connector_merchant_id": null
		}
	]
}
```

</details>

<details>

<summary>Payment Confirm (Encrypt)</summary>

```bash
curl --location 'https://base_url/payments/pay_AOWndR0v1zIfq8T8Ff7h/confirm' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_easrii6Oqqq9fjnj4AQw7tkdKDf9bfo8cIEa9IfUj8nl7LbLjMQD1cM9UeK6jnLb' \
--data '{
	"confirm": true,
	"payment_method": "wallet",
	"payment_method_type": "apple_pay",
	"payment_method_data": {
		"wallet": {
			"apple_pay": {
				"payment_data": {
					"application_primary_account_number": "48..60",
					"application_expiration_month": "01",
					"application_expiration_year": "31",
					"payment_data": {
						"online_payment_cryptogram": "A..=",
						"eci_indicator": "7"
					}
				},
			"payment_method": {
					"display_name": "Visa 4228",
					"network": "Visa",
					"type": "debit"
				},
				"transaction_identifier": "a0..4a"
			}
		},
		"billing": null
	},
	"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",
		"language": "nl-NL",
		"color_depth": 24,
		"screen_height": 723,
		"screen_width": 1536,
		"time_zone": 0,
		"java_enabled": true,
		"java_script_enabled": true,
		"ip_address": "127.0.0.1"
	},
	"billing": {
		"address": {
			"line1": "1467",
			"line2": "Harrison Street",
			"line3": "Harrison Street",
			"city": "San Fransico",
			"state": "California",
			"zip": "94122",
			"country": "US",
			"first_name": "John",
			"last_name": "Doe"
		}
	},
	"shipping": {
		"address": {
			"line1": "1467",
			"line2": "Harrison Street",
			"line3": "Harrison Street",
			"city": "San Fransico",
			"state": "California",
			"zip": "94122",
			"country": "US",
			"first_name": "John",
			"last_name": "Doe"
		}
	}
}'
```
```json
{
	"payment_id": "pay_AOWndR0v1zIfq8T8Ff7h",
	"merchant_id": "postman_merchant_GHAction_1758644632",
	"status": "succeeded",
	"amount": 1000,
	"net_amount": 1000,
	"shipping_cost": null,
	"amount_capturable": 0,
	"amount_received": 1000,
	"connector": "paysafe",
	"client_secret": "pay_AOWndR0v1zIfq8T8Ff7h_secret_Tjst2yhf6Z5Ju7C3fGnT",
	"created": "2025-09-23T17:06:52.717Z",
	"currency": "USD",
	"customer_id": "StripeCustomer",
	"customer": {
		"id": "StripeCustomer",
		"name": "John Doe",
		"email": "likhin.bopanna@gmail.com",
		"phone": "999999999",
		"phone_country_code": "+65"
	},
	"description": "Its my first payment request",
	"refunds": null,
	"disputes": null,
	"mandate_id": null,
	"mandate_data": null,
	"setup_future_usage": null,
	"off_session": null,
	"capture_on": null,
	"capture_method": "automatic",
	"payment_method": "wallet",
	"payment_method_data": {
		"wallet": {
			"apple_pay": {
				"last4": "4228",
				"card_network": "Visa",
				"type": "debit"
			}
		},
		"billing": null
	},
	"payment_token": null,
	"shipping": {
		"address": {
			"city": "San Fransico",
			"country": "US",
			"line1": "1467",
			"line2": "Harrison Street",
			"line3": "Harrison Street",
			"zip": "94122",
			"state": "California",
			"first_name": "John",
			"last_name": "Doe",
			"origin_zip": null
		},
		"phone": null,
		"email": null
	},
	"billing": {
		"address": {
			"city": "San Fransico",
			"country": "US",
			"line1": "1467",
			"line2": "Harrison Street",
			"line3": "Harrison Street",
			"zip": "94122",
			"state": "California",
			"first_name": "John",
			"last_name": "Doe",
			"origin_zip": null
		},
		"phone": null,
		"email": null
	},
	"order_details": null,
	"email": "likhin.bopanna@gmail.com",
	"name": "John Doe",
	"phone": "999999999",
	"return_url": "https://duck.com/",
	"authentication_type": "no_three_ds",
	"statement_descriptor_name": "joseph",
	"statement_descriptor_suffix": "JS",
	"next_action": null,
	"cancellation_reason": null,
	"error_code": null,
	"error_message": null,
	"unified_code": null,
	"unified_message": null,
	"payment_experience": null,
	"payment_method_type": "apple_pay",
	"connector_label": "paysafe_US_default",
	"business_country": "US",
	"business_label": "default",
	"business_sub_label": null,
	"allowed_payment_method_types": null,
	"ephemeral_key": null,
	"manual_retry_allowed": null,
	"connector_transaction_id": "c847c066-1d83-4b8c-9b2e-1a72559849c1",
	"frm_message": null,
	"metadata": {
		"udf1": "value1",
		"login_date": "2019-09-10T10:11:12Z",
		"new_customer": "true"
	},
	"connector_metadata": null,
	"feature_metadata": {
		"redirect_response": null,
		"search_tags": null,
		"apple_pay_recurring_details": null,
		"gateway_system": "direct"
	},
	"reference_id": null,
	"payment_link": null,
	"profile_id": "pro_X9nYDTDvLffn5ZFzovVC",
	"surcharge_details": null,
	"attempt_count": 1,
	"merchant_decision": null,
	"merchant_connector_id": "mca_i61PcZcv8kyTX059WELX",
	"incremental_authorization_allowed": false,
	"authorization_count": null,
	"incremental_authorizations": null,
	"external_authentication_details": null,
	"external_3ds_authentication_attempted": false,
	"expires_on": "2025-09-23T17:21:52.717Z",
	"fingerprint": null,
	"browser_info": {
		"os_type": null,
		"language": "nl-NL",
		"time_zone": 0,
		"ip_address": "127.0.0.1",
		"os_version": null,
		"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",
		"color_depth": 24,
		"device_model": null,
		"java_enabled": true,
		"screen_width": 1536,
		"accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
		"screen_height": 723,
		"accept_language": "en",
		"java_script_enabled": true
	},
	"payment_channel": null,
	"payment_method_id": null,
	"network_transaction_id": null,
	"payment_method_status": null,
	"updated": "2025-09-23T17:07:45.459Z",
	"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,
	"is_iframe_redirection_enabled": null,
	"whole_connector_response": null,
	"enable_partial_authorization": null,
	"enable_overcapture": null,
	"is_overcapture_enabled": null,
	"network_details": null
}
```

</details>

<details>

<summary>Payment Initiate</summary>

```bash
curl --location 'https://base_url/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Accept-Language: ja' \
--header 'api-key: dev_easrii6Oqqq9fjnj4AQw7tkdKDf9bfo8cIEa9IfUj8nl7LbLjMQD1cM9UeK6jnLb' \
--data-raw '{
    "amount": 1000,
    "currency": "USD",
    "confirm": false,
    "business_country": "US",
    "business_label": "default",
    "capture_method": "automatic",
    "capture_on": "2022-09-10T10:11:12Z",
    "customer_id": "StripeCustomer",
    "email": "likhin.bopanna@gmail.com",
    "name": "John Doe",
    "phone": "999999999",
    "phone_country_code": "+65",
    "description": "Its my first payment request",
    "authentication_type": "no_three_ds",
    "return_url": "https://duck.com",
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "metadata": {
        "udf1": "value1",
        "new_customer": "true",
        "login_date": "2019-09-10T10:11:12Z"
    }
}'
```
```json
{
	"payment_id": "pay_mBfTZrLSPhmdcPGo6cwg",
	"merchant_id": "postman_merchant_GHAction_1758644632",
	"status": "requires_payment_method",
	"amount": 1000,
	"net_amount": 1000,
	"shipping_cost": null,
	"amount_capturable": 0,
	"amount_received": null,
	"connector": null,
	"client_secret": "pay_mBfTZrLSPhmdcPGo6cwg_secret_rnqK1jqamjwpYrBxNqRx",
	"created": "2025-09-23T17:10:35.122Z",
	"currency": "USD",
	"customer_id": "StripeCustomer",
	"customer": {
		"id": "StripeCustomer",
		"name": "John Doe",
		"email": "likhin.bopanna@gmail.com",
		"phone": "999999999",
		"phone_country_code": "+65"
	},
	"description": "Its my first payment request",
	"refunds": null,
	"disputes": null,
	"mandate_id": null,
	"mandate_data": null,
	"setup_future_usage": null,
	"off_session": null,
	"capture_on": null,
	"capture_method": "automatic",
	"payment_method": null,
	"payment_method_data": null,
	"payment_token": null,
	"shipping": null,
	"billing": null,
	"order_details": null,
	"email": "likhin.bopanna@gmail.com",
	"name": "John Doe",
	"phone": "999999999",
	"return_url": "https://duck.com/",
	"authentication_type": "no_three_ds",
	"statement_descriptor_name": "joseph",
	"statement_descriptor_suffix": "JS",
	"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": "US",
	"business_label": "default",
	"business_sub_label": null,
	"allowed_payment_method_types": null,
	"ephemeral_key": {
		"customer_id": "StripeCustomer",
		"created_at": 1758647435,
		"expires": 1758651035,
		"secret": "epk_7c990250150a4b80bab9366a184d17ae"
	},
	"manual_retry_allowed": null,
	"connector_transaction_id": null,
	"frm_message": null,
	"metadata": {
		"udf1": "value1",
		"login_date": "2019-09-10T10:11:12Z",
		"new_customer": "true"
	},
	"connector_metadata": null,
	"feature_metadata": null,
	"reference_id": null,
	"payment_link": null,
	"profile_id": "pro_X9nYDTDvLffn5ZFzovVC",
	"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-09-23T17:25:35.122Z",
	"fingerprint": null,
	"browser_info": null,
	"payment_channel": null,
	"payment_method_id": null,
	"network_transaction_id": null,
	"payment_method_status": null,
	"updated": "2025-09-23T17:10:35.142Z",
	"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,
	"is_iframe_redirection_enabled": null,
	"whole_connector_response": null,
	"enable_partial_authorization": null,
	"enable_overcapture": null,
	"is_overcapture_enabled": null,
	"network_details": null
}
```

</details>

<details>

<summary>Session call</summary>

```bash
curl --location 'https://base_url/payments/session_tokens' \
--header 'Content-Type: application/json' \
--header 'api-key: pk_dev_8bc73f9c3edb44f7b8a4c9f08fa49169' \
--data '{
    "payment_id": "pay_mBfTZrLSPhmdcPGo6cwg",
    "wallets": [],
    "client_secret": "pay_mBfTZrLSPhmdcPGo6cwg_secret_rnqK1jqamjwpYrBxNqRx"
}'
```
```json
{
	"payment_id": "pay_mBfTZrLSPhmdcPGo6cwg",
	"client_secret": "pay_mBfTZrLSPhmdcPGo6cwg_secret_rnqK1jqamjwpYrBxNqRx",
	"session_token": [
		{
			"wallet_name": "apple_pay",
			"session_token_data": {
				"epoch_timestamp": 1758647447788,
				"expires_at": 1758651047788,
				"merchant_session_identifier": "SS..C3",
				"nonce": "8de2c3ef",
				"merchant_identifier": "8C..C4",
				"domain_name": "hyperswitch.app",
				"display_name": "apple pay",
				"signature": "30..00",
				"operational_analytics_identifier": "apple pay:8C..C4",
				"retries": 0,
				"psp_id": "8C..C4"
			},
			"payment_request_data": {
				"country_code": "US",
				"currency_code": "USD",
				"total": {
					"label": "applepay",
					"type": "final",
					"amount": "10.00"
				},
				"merchant_capabilities": [
					"supports3DS"
				],
				"supported_networks": [
					"visa",
					"masterCard",
					"amex",
					"discover"
				],
				"merchant_identifier": "merchant"
			},
			"connector": "paysafe",
			"delayed_session_token": false,
			"sdk_next_action": {
				"next_action": "confirm"
			},
			"connector_reference_id": null,
			"connector_sdk_public_key": null,
			"connector_merchant_id": null
		}
	]
}
```

</details>

<details>

<summary>Payment Confirm (Decrypt)</summary>

```bash
curl --location 'https://base_url/payments/pay_mBfTZrLSPhmdcPGo6cwg/confirm' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_easrii6Oqqq9fjnj4AQw7tkdKDf9bfo8cIEa9IfUj8nl7LbLjMQD1cM9UeK6jnLb' \
--data '{
	"confirm": true,
	"payment_method": "wallet",
	"payment_method_type": "apple_pay",
	"payment_method_data": {
		"wallet": {
			"apple_pay": {
				"payment_data": "ey...n0=",
				"payment_method": {
					"display_name": "Visa 4228",
					"network": "Visa",
					"type": "debit"
				},
				"transaction_identifier": "a0...4a"
			}
		},
		"billing": null
	},
	"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",
		"language": "nl-NL",
		"color_depth": 24,
		"screen_height": 723,
		"screen_width": 1536,
		"time_zone": 0,
		"java_enabled": true,
		"java_script_enabled": true,
		"ip_address": "127.0.0.1"
	},
	"billing": {
		"address": {
			"line1": "1467",
			"line2": "Harrison Street",
			"line3": "Harrison Street",
			"city": "San Fransico",
			"state": "California",
			"zip": "94122",
			"country": "US",
			"first_name": "John",
			"last_name": "Doe"
		}
	},
	"shipping": {
		"address": {
			"line1": "1467",
			"line2": "Harrison Street",
			"line3": "Harrison Street",
			"city": "San Fransico",
			"state": "California",
			"zip": "94122",
			"country": "US",
			"first_name": "John",
			"last_name": "Doe"
		}
	}
}'
```
```json
{
	"payment_id": "pay_mBfTZrLSPhmdcPGo6cwg",
	"merchant_id": "postman_merchant_GHAction_1758644632",
	"status": "succeeded",
	"amount": 1000,
	"net_amount": 1000,
	"shipping_cost": null,
	"amount_capturable": 0,
	"amount_received": 1000,
	"connector": "paysafe",
	"client_secret": "pay_mBfTZrLSPhmdcPGo6cwg_secret_rnqK1jqamjwpYrBxNqRx",
	"created": "2025-09-23T17:10:35.122Z",
	"currency": "USD",
	"customer_id": "StripeCustomer",
	"customer": {
		"id": "StripeCustomer",
		"name": "John Doe",
		"email": "likhin.bopanna@gmail.com",
		"phone": "999999999",
		"phone_country_code": "+65"
	},
	"description": "Its my first payment request",
	"refunds": null,
	"disputes": null,
	"mandate_id": null,
	"mandate_data": null,
	"setup_future_usage": null,
	"off_session": null,
	"capture_on": null,
	"capture_method": "automatic",
	"payment_method": "wallet",
	"payment_method_data": {
		"wallet": {
			"apple_pay": {
				"last4": "4228",
				"card_network": "Visa",
				"type": "debit"
			}
		},
		"billing": null
	},
	"payment_token": null,
	"shipping": {
		"address": {
			"city": "San Fransico",
			"country": "US",
			"line1": "1467",
			"line2": "Harrison Street",
			"line3": "Harrison Street",
			"zip": "94122",
			"state": "California",
			"first_name": "John",
			"last_name": "Doe",
			"origin_zip": null
		},
		"phone": null,
		"email": null
	},
	"billing": {
		"address": {
			"city": "San Fransico",
			"country": "US",
			"line1": "1467",
			"line2": "Harrison Street",
			"line3": "Harrison Street",
			"zip": "94122",
			"state": "California",
			"first_name": "John",
			"last_name": "Doe",
			"origin_zip": null
		},
		"phone": null,
		"email": null
	},
	"order_details": null,
	"email": "likhin.bopanna@gmail.com",
	"name": "John Doe",
	"phone": "999999999",
	"return_url": "https://duck.com/",
	"authentication_type": "no_three_ds",
	"statement_descriptor_name": "joseph",
	"statement_descriptor_suffix": "JS",
	"next_action": null,
	"cancellation_reason": null,
	"error_code": null,
	"error_message": null,
	"unified_code": null,
	"unified_message": null,
	"payment_experience": null,
	"payment_method_type": "apple_pay",
	"connector_label": "paysafe_US_default",
	"business_country": "US",
	"business_label": "default",
	"business_sub_label": null,
	"allowed_payment_method_types": null,
	"ephemeral_key": null,
	"manual_retry_allowed": null,
	"connector_transaction_id": "3becc659-ad98-4e6a-9e72-5290eb80e214",
	"frm_message": null,
	"metadata": {
		"udf1": "value1",
		"login_date": "2019-09-10T10:11:12Z",
		"new_customer": "true"
	},
	"connector_metadata": null,
	"feature_metadata": {
		"redirect_response": null,
		"search_tags": null,
		"apple_pay_recurring_details": null,
		"gateway_system": "direct"
	},
	"reference_id": null,
	"payment_link": null,
	"profile_id": "pro_X9nYDTDvLffn5ZFzovVC",
	"surcharge_details": null,
	"attempt_count": 1,
	"merchant_decision": null,
	"merchant_connector_id": "mca_i61PcZcv8kyTX059WELX",
	"incremental_authorization_allowed": false,
	"authorization_count": null,
	"incremental_authorizations": null,
	"external_authentication_details": null,
	"external_3ds_authentication_attempted": false,
	"expires_on": "2025-09-23T17:25:35.122Z",
	"fingerprint": null,
	"browser_info": {
		"os_type": null,
		"language": "nl-NL",
		"time_zone": 0,
		"ip_address": "127.0.0.1",
		"os_version": null,
		"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",
		"color_depth": 24,
		"device_model": null,
		"java_enabled": true,
		"screen_width": 1536,
		"accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
		"screen_height": 723,
		"accept_language": "en",
		"java_script_enabled": true
	},
	"payment_channel": null,
	"payment_method_id": null,
	"network_transaction_id": null,
	"payment_method_status": null,
	"updated": "2025-09-23T17:11:20.313Z",
	"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,
	"is_iframe_redirection_enabled": null,
	"whole_connector_response": null,
	"enable_partial_authorization": null,
	"enable_overcapture": null,
	"is_overcapture_enabled": null,
	"network_details": null
}
```

</details>

<details>

<summary>WASM changes</summary>

<img width="618" height="858" alt="image" src="https://github.com/user-attachments/assets/7d0439bb-dd00-4bdc-95da-1334ef4c9fa0" />

</details>

<details>

<summary>Dashboard changes</summary>

<img width="1001" height="204" alt="image" src="https://github.com/user-attachments/assets/e3ee4b50-b27f-4c20-be92-24e23415d85a" />
<img width="569" height="464" alt="image" src="https://github.com/user-attachments/assets/d71fe988-85b5-4f2d-8d94-8131b86a61b7" />
<img width="570" height="994" alt="image" src="https://github.com/user-attachments/assets/718b5878-e609-4c68-b56b-e0a7596eaa54" />
<img width="656" height="162" alt="image" src="https://github.com/user-attachments/assets/9631030a-b128-4480-baaa-00225d4c0033" />
<img width="567" height="154" alt="image" src="https://github.com/user-attachments/assets/9e680eac-c108-493e-82e3-701191f34c44" />
<img width="830" height="224" alt="image" src="https://github.com/user-attachments/assets/97446ac7-d03c-4e1e-80a2-44786b082e12" />

</details>

> [!IMPORTANT]
> Connector decryption flow is not fully implemented yet.

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

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