Bug: FEATURE(connector): [Facilitapay] Add support for Pix Bank transfer



Documentation: https://sandbox-portal.facilitapay.com/#/docs
diff --git a/api-reference-v2/openapi_spec.json b/api-reference-v2/openapi_spec.json
index 10682866ab7..c758e0fbb8a 100644
--- a/api-reference-v2/openapi_spec.json
+++ b/api-reference-v2/openapi_spec.json
@@ -6230,6 +6230,18 @@
                     "description": "CNPJ is a Brazilian company tax identification number",
                     "example": "74469027417312",
                     "nullable": true
+                  },
+                  "source_bank_account_id": {
+                    "type": "string",
+                    "description": "Source bank account number",
+                    "example": "8b2812f0-d6c8-4073-97bb-9fa964d08bc5",
+                    "nullable": true
+                  },
+                  "destination_bank_account_id": {
+                    "type": "string",
+                    "description": "Destination bank account number",
+                    "example": "9b95f84e-de61-460b-a14b-f23b4e71c97b",
+                    "nullable": true
                   }
                 }
               }
@@ -7776,6 +7788,7 @@
           "dlocal",
           "ebanx",
           "elavon",
+          "facilitapay",
           "fiserv",
           "fiservemea",
           "fiuu",
@@ -10443,6 +10456,18 @@
               "user_bank_account_number"
             ]
           },
+          {
+            "type": "string",
+            "enum": [
+              "user_source_bank_account_id"
+            ]
+          },
+          {
+            "type": "string",
+            "enum": [
+              "user_destination_bank_account_id"
+            ]
+          },
           {
             "type": "string",
             "enum": [
@@ -19428,6 +19453,18 @@
             "description": "Partially masked CNPJ - CNPJ is a Brazilian company tax identification number",
             "example": "**** 417312",
             "nullable": true
+          },
+          "source_bank_account_id": {
+            "type": "string",
+            "description": "Partially masked source bank account number",
+            "example": "********-****-4073-****-9fa964d08bc5",
+            "nullable": true
+          },
+          "destination_bank_account_id": {
+            "type": "string",
+            "description": "Partially masked destination bank account number",
+            "example": "********-****-460b-****-f23b4e71c97b",
+            "nullable": true
           }
         }
       },
@@ -21082,6 +21119,7 @@
           "dlocal",
           "ebanx",
           "elavon",
+          "facilitapay",
           "fiserv",
           "fiservemea",
           "fiuu",
diff --git a/config/config.example.toml b/config/config.example.toml
index 15b9dd2fc4d..63c7c89b039 100644
--- a/config/config.example.toml
+++ b/config/config.example.toml
@@ -331,7 +331,7 @@ cards = [
   "datatrans",
   "deutschebank",
     "digitalvirgo",
-    "facilitapay",
+  "facilitapay",
   "globalpay",
   "globepay",
   "gocardless",
@@ -647,6 +647,9 @@ credit = { country = "FR", currency = "CAD, AUD, EUR, USD" }
 [pm_filters.digitalvirgo]
 direct_carrier_billing = {country = "MA, CM, ZA, EG, SN, DZ, TN, ML, GN, GH, LY, GA, CG, MG, BW, SD, NG, ID, SG, AZ, TR, FR, ES, PL, GB, PT, DE, IT, BE, IE, SK, GR, NL, CH, BR, MX, AR, CL, AE, IQ, KW, BH, SA, QA, PS, JO, OM, RU" , currency = "MAD, XOF, XAF, ZAR, EGP, DZD, TND, GNF, GHS, LYD, XAF, CDF, MGA, BWP, SDG, NGN, IDR, SGD, RUB, AZN, TRY, EUR, PLN, GBP, CHF, BRL, MXN, ARS, CLP, AED, IQD, KWD, BHD, SAR, QAR, ILS, JOD, OMR" }
 
+[pm_filters.facilitapay]
+pix = { country = "BR", currency = "BRL" }
+
 [pm_filters.helcim]
 credit = { country = "US, CA", currency = "USD, CAD" }
 debit = { country = "US, CA", currency = "USD, CAD" }
@@ -745,7 +748,7 @@ credit = { country = "AD,AE,AF,AG,AI,AL,AM,AO,AQ,AR,AS,AT,AU,AW,AX,AZ,BA,BB,BD,B
 debit = { country = "AD,AE,AF,AG,AI,AL,AM,AO,AQ,AR,AS,AT,AU,AW,AX,AZ,BA,BB,BD,BE,BF,BG,BH,BI,BJ,BL,BM,BN,BO,BQ,BR,BS,BT,BV,BW,BY,BZ,CA,CC,CD,CF,CG,CH,CI,CK,CL,CM,CN,CO,CR,CU,CV,CW,CX,CY,CZ,DE,DJ,DK,DM,DO,DZ,EC,EE,EG,EH,ER,ES,ET,FI,FJ,FK,FM,FO,FR,GA,GB,GD,GE,GF,GG,GH,GI,GL,GM,GN,GP,GQ,GR,GT,GU,GW,GY,HK,HM,HN,HR,HT,HU,ID,IE,IL,IM,IN,IO,IQ,IR,IS,IT,JE,JM,JO,JP,KE,KG,KH,KI,KM,KN,KP,KR,KW,KY,KZ,LA,LB,LC,LI,LK,LR,LS,LT,LU,LV,LY,MA,MC,MD,ME,MF,MG,MH,MK,ML,MM,MN,MO,MP,MQ,MR,MS,MT,MU,MV,MW,MX,MY,MZ,NA,NC,NE,NF,NG,NI,NL,NO,NP,NR,NU,NZ,OM,PA,PE,PF,PG,PH,PK,PL,PM,PN,PR,PS,PT,PW,PY,QA,RE,RO,RS,RU,RW,SA,SB,SC,SD,SE,SG,SH,SI,SJ,SK,SL,SM,SN,SO,SR,SS,ST,SV,SX,SY,SZ,TC,TD,TF,TG,TH,TJ,TL,TM,TN,TO,TR,TT,TV,TW,TZ,UA,UG,UM,US,UY,UZ,VA,VC,VE,VG,VI,VN,VU,WF,WS,YE,YT,ZA,ZM,ZW", currency = "AED,AFN,ALL,AMD,ANG,AOA,ARS,AUD,AWG,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BTN,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CVE,CZK,DJF,DKK,DOP,DZD,EGP,ERN,ETB,EUR,FJD,FKP,GBP,GEL,GHS,GIP,GMD,GNF,GTQ,GYD,HKD,HNL,HRK,HTG,HUF,IDR,ILS,INR,IQD,IRR,ISK,JMD,JOD,JPY,KES,KGS,KHR,KMF,KPW,KRW,KWD,KYD,KZT,LAK,LBP,LKR,LRD,LSL,LYD,MAD,MDL,MGA,MKD,MMK,MNT,MOP,MRU,MUR,MVR,MWK,MXN,MYR,MZN,NAD,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SDG,SEK,SGD,SHP,SLL,SOS,SRD,SSP,SVC,SYP,SZL,THB,TJS,TMT,TND,TOP,TRY,TTD,TWD,TZS,UAH,UGX,USD,UYU,UZS,VND,VUV,WST,XAF,XCD,XOF,XPF,YER,ZAR,ZMW,ZWL" }
 
 [connector_customer]
-connector_list = "gocardless,stax,stripe"
+connector_list = "gocardless,stax,stripe,facilitapay"
 payout_connector_list = "nomupay,stripe,wise"
 
 [bank_config.online_banking_fpx]
diff --git a/config/deployments/integration_test.toml b/config/deployments/integration_test.toml
index 802af333f8b..0b4c0967e14 100644
--- a/config/deployments/integration_test.toml
+++ b/config/deployments/integration_test.toml
@@ -166,7 +166,7 @@ force_cookies = true
 enabled = true
 
 [connector_customer]
-connector_list = "gocardless,stax,stripe"
+connector_list = "gocardless,stax,stripe,facilitapay"
 payout_connector_list = "nomupay,stripe,wise"
 
 [delayed_session_response]
@@ -359,6 +359,9 @@ paypal.currency = "AUD,BRL,CAD,CNY,CZK,DKK,EUR,HKD,HUF,ILS,JPY,MYR,MXN,TWD,NZD,N
 credit.currency = "USD"
 debit.currency = "USD"
 
+[pm_filters.facilitapay]
+pix = { country = "BR", currency = "BRL" }
+
 [pm_filters.helcim]
 credit = { country = "US, CA", currency = "USD, CAD" }
 debit = { country = "US, CA", currency = "USD, CAD" }
diff --git a/config/deployments/production.toml b/config/deployments/production.toml
index 3cc5b8c0f8a..563941cf9d0 100644
--- a/config/deployments/production.toml
+++ b/config/deployments/production.toml
@@ -15,7 +15,7 @@ open_banking_uk.adyen.banks = "aib,bank_of_scotland,danske_bank,first_direct,fir
 przelewy24.stripe.banks = "alior_bank,bank_millennium,bank_nowy_bfg_sa,bank_pekao_sa,banki_spbdzielcze,blik,bnp_paribas,boz,citi,credit_agricole,e_transfer_pocztowy24,getin_bank,idea_bank,inteligo,mbank_mtransfer,nest_przelew,noble_pay,pbac_z_ipko,plus_bank,santander_przelew24,toyota_bank,volkswagen_bank"
 
 [connector_customer]
-connector_list = "stax,stripe,gocardless"
+connector_list = "stax,stripe,gocardless,facilitapay"
 payout_connector_list = "nomupay,stripe,wise"
 
 # Connector configuration, provided attributes will be used to fulfill API requests.
@@ -409,6 +409,9 @@ paypal.currency = "AUD,BRL,CAD,CNY,CZK,DKK,EUR,HKD,HUF,ILS,JPY,MYR,MXN,TWD,NZD,N
 credit.currency = "USD"
 debit.currency = "USD"
 
+[pm_filters.facilitapay]
+pix = { country = "BR", currency = "BRL" }
+
 [pm_filters.helcim]
 credit = { country = "US, CA", currency = "USD, CAD" }
 debit = { country = "US, CA", currency = "USD, CAD" }
diff --git a/config/deployments/sandbox.toml b/config/deployments/sandbox.toml
index c3555f7ea05..c861ade9aab 100644
--- a/config/deployments/sandbox.toml
+++ b/config/deployments/sandbox.toml
@@ -15,7 +15,7 @@ open_banking_uk.adyen.banks = "aib,bank_of_scotland,danske_bank,first_direct,fir
 przelewy24.stripe.banks = "alior_bank,bank_millennium,bank_nowy_bfg_sa,bank_pekao_sa,banki_spbdzielcze,blik,bnp_paribas,boz,citi,credit_agricole,e_transfer_pocztowy24,getin_bank,idea_bank,inteligo,mbank_mtransfer,nest_przelew,noble_pay,pbac_z_ipko,plus_bank,santander_przelew24,toyota_bank,volkswagen_bank"
 
 [connector_customer]
-connector_list = "stax,stripe,gocardless"
+connector_list = "stax,stripe,gocardless,facilitapay"
 payout_connector_list = "nomupay,stripe,wise"
 
 # Connector configuration, provided attributes will be used to fulfill API requests.
@@ -411,6 +411,9 @@ paypal.currency = "AUD,BRL,CAD,CNY,CZK,DKK,EUR,HKD,HUF,ILS,JPY,MYR,MXN,TWD,NZD,N
 credit.currency = "USD"
 debit.currency = "USD"
 
+[pm_filters.facilitapay]
+pix = { country = "BR", currency = "BRL" }
+
 [pm_filters.helcim]
 credit = { country = "US, CA", currency = "USD, CAD" }
 debit = { country = "US, CA", currency = "USD, CAD" }
diff --git a/config/development.toml b/config/development.toml
index 37c496efbae..f271f70fcac 100644
--- a/config/development.toml
+++ b/config/development.toml
@@ -574,6 +574,9 @@ paypal = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,B
 [pm_filters.braintree]
 paypal = { currency = "AUD,BRL,CAD,CNY,CZK,DKK,EUR,HKD,HUF,ILS,JPY,MYR,MXN,TWD,NZD,NOK,PHP,PLN,GBP,RUB,SGD,SEK,CHF,THB,USD" }
 
+[pm_filters.facilitapay]
+pix = { country = "BR", currency = "BRL" }
+
 [pm_filters.helcim]
 credit = { country = "US, CA", currency = "USD, CAD" }
 debit = { country = "US, CA", currency = "USD, CAD" }
@@ -751,7 +754,7 @@ nexixpay = { payment_method = "card" }
 redsys = { payment_method = "card" }
 
 [connector_customer]
-connector_list = "gocardless,stax,stripe"
+connector_list = "gocardless,stax,stripe,facilitapay"
 payout_connector_list = "nomupay,stripe,wise"
 
 [dummy_connector]
diff --git a/config/docker_compose.toml b/config/docker_compose.toml
index 4b0214b8f1b..d8f2d4bd34d 100644
--- a/config/docker_compose.toml
+++ b/config/docker_compose.toml
@@ -575,6 +575,9 @@ apple_pay = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,B
 google_pay = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
 paypal = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
 
+[pm_filters.facilitapay]
+pix = { country = "BR", currency = "BRL" }
+
 [pm_filters.helcim]
 credit = { country = "US, CA", currency = "USD, CAD" }
 debit = { country = "US, CA", currency = "USD, CAD" }
@@ -713,7 +716,7 @@ card.debit = { connector_list = "cybersource" }
 connector_list = "adyen,cybersource,novalnet,stripe,worldpay"
 
 [connector_customer]
-connector_list = "gocardless,stax,stripe"
+connector_list = "gocardless,stax,stripe,facilitapay"
 payout_connector_list = "nomupay,stripe,wise"
 
 
diff --git a/crates/api_models/src/enums.rs b/crates/api_models/src/enums.rs
index 212504baaa3..55857ec4412 100644
--- a/crates/api_models/src/enums.rs
+++ b/crates/api_models/src/enums.rs
@@ -237,6 +237,8 @@ pub enum FieldType {
     UserBlikCode,
     UserBank,
     UserBankAccountNumber,
+    UserSourceBankAccountId,
+    UserDestinationBankAccountId,
     Text,
     DropDown { options: Vec<String> },
     UserDateOfBirth,
diff --git a/crates/api_models/src/payments.rs b/crates/api_models/src/payments.rs
index 011fd7e4431..1f7b40de7e0 100644
--- a/crates/api_models/src/payments.rs
+++ b/crates/api_models/src/payments.rs
@@ -19,6 +19,7 @@ use common_utils::{
     ext_traits::{ConfigExt, Encode, ValueExt},
     hashing::HashedString,
     id_type,
+    new_type::MaskedBankAccount,
     pii::{self, Email},
     types::{MinorUnit, StringMajorUnit},
 };
@@ -3413,6 +3414,14 @@ pub enum BankTransferData {
         /// CNPJ is a Brazilian company tax identification number
         #[schema(value_type = Option<String>, example = "74469027417312")]
         cnpj: Option<Secret<String>>,
+
+        /// Source bank account number
+        #[schema(value_type = Option<String>, example = "8b2812f0-d6c8-4073-97bb-9fa964d08bc5")]
+        source_bank_account_id: Option<MaskedBankAccount>,
+
+        /// Destination bank account number
+        #[schema(value_type = Option<String>, example = "9b95f84e-de61-460b-a14b-f23b4e71c97b")]
+        destination_bank_account_id: Option<MaskedBankAccount>,
     },
     Pse {},
     LocalBankTransfer {
diff --git a/crates/api_models/src/payments/additional_info.rs b/crates/api_models/src/payments/additional_info.rs
index 33297e2b342..371bebe5982 100644
--- a/crates/api_models/src/payments/additional_info.rs
+++ b/crates/api_models/src/payments/additional_info.rs
@@ -167,6 +167,14 @@ pub struct PixBankTransferAdditionalData {
     /// Partially masked CNPJ - CNPJ is a Brazilian company tax identification number
     #[schema(value_type = Option<String>, example = "**** 417312")]
     pub cnpj: Option<MaskedBankAccount>,
+
+    /// Partially masked source bank account number
+    #[schema(value_type = Option<String>, example = "********-****-4073-****-9fa964d08bc5")]
+    pub source_bank_account_id: Option<MaskedBankAccount>,
+
+    /// Partially masked destination bank account number
+    #[schema(value_type = Option<String>, example = "********-****-460b-****-f23b4e71c97b")]
+    pub destination_bank_account_id: Option<MaskedBankAccount>,
 }
 
 #[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
diff --git a/crates/common_enums/src/connector_enums.rs b/crates/common_enums/src/connector_enums.rs
index 70efd457a97..0b831d63c2d 100644
--- a/crates/common_enums/src/connector_enums.rs
+++ b/crates/common_enums/src/connector_enums.rs
@@ -80,7 +80,7 @@ pub enum RoutableConnectors {
     Dlocal,
     Ebanx,
     Elavon,
-    // Facilitapay,
+    Facilitapay,
     Fiserv,
     Fiservemea,
     Fiuu,
@@ -225,7 +225,7 @@ pub enum Connector {
     Dlocal,
     Ebanx,
     Elavon,
-    // Facilitapay,
+    Facilitapay,
     Fiserv,
     Fiservemea,
     Fiuu,
@@ -344,6 +344,7 @@ impl Connector {
                 | (Self::Iatapay, _)
                 | (Self::Volt, _)
                 | (Self::Itaubank, _)
+                | (Self::Facilitapay, _)
         )
     }
     pub fn supports_file_storage_module(self) -> bool {
@@ -387,7 +388,7 @@ impl Connector {
             | Self::Dlocal
             | Self::Ebanx
             | Self::Elavon
-            // | Self::Facilitapay
+            | Self::Facilitapay
             | Self::Fiserv
             | Self::Fiservemea
             | Self::Fiuu
@@ -537,7 +538,7 @@ impl From<RoutableConnectors> for Connector {
             RoutableConnectors::Dlocal => Self::Dlocal,
             RoutableConnectors::Ebanx => Self::Ebanx,
             RoutableConnectors::Elavon => Self::Elavon,
-            // RoutableConnectors::Facilitapay => Self::Facilitapay,
+            RoutableConnectors::Facilitapay => Self::Facilitapay,
             RoutableConnectors::Fiserv => Self::Fiserv,
             RoutableConnectors::Fiservemea => Self::Fiservemea,
             RoutableConnectors::Fiuu => Self::Fiuu,
@@ -646,7 +647,7 @@ impl TryFrom<Connector> for RoutableConnectors {
             Connector::Dlocal => Ok(Self::Dlocal),
             Connector::Ebanx => Ok(Self::Ebanx),
             Connector::Elavon => Ok(Self::Elavon),
-            // Connector::Facilitapay => Ok(Self::Facilitapay),
+            Connector::Facilitapay => Ok(Self::Facilitapay),
             Connector::Fiserv => Ok(Self::Fiserv),
             Connector::Fiservemea => Ok(Self::Fiservemea),
             Connector::Fiuu => Ok(Self::Fiuu),
diff --git a/crates/common_enums/src/enums.rs b/crates/common_enums/src/enums.rs
index 87c64747c69..48aa9eafd8f 100644
--- a/crates/common_enums/src/enums.rs
+++ b/crates/common_enums/src/enums.rs
@@ -6607,6 +6607,66 @@ pub enum RomaniaStatesAbbreviation {
     ValceaCounty,
 }
 
+#[derive(
+    Debug, Clone, PartialEq, Eq, Serialize, Deserialize, strum::Display, strum::EnumString,
+)]
+pub enum BrazilStatesAbbreviation {
+    #[strum(serialize = "AC")]
+    Acre,
+    #[strum(serialize = "AL")]
+    Alagoas,
+    #[strum(serialize = "AP")]
+    Amapá,
+    #[strum(serialize = "AM")]
+    Amazonas,
+    #[strum(serialize = "BA")]
+    Bahia,
+    #[strum(serialize = "CE")]
+    Ceará,
+    #[strum(serialize = "DF")]
+    DistritoFederal,
+    #[strum(serialize = "ES")]
+    EspíritoSanto,
+    #[strum(serialize = "GO")]
+    Goiás,
+    #[strum(serialize = "MA")]
+    Maranhão,
+    #[strum(serialize = "MT")]
+    MatoGrosso,
+    #[strum(serialize = "MS")]
+    MatoGrossoDoSul,
+    #[strum(serialize = "MG")]
+    MinasGerais,
+    #[strum(serialize = "PA")]
+    Pará,
+    #[strum(serialize = "PB")]
+    Paraíba,
+    #[strum(serialize = "PR")]
+    Paraná,
+    #[strum(serialize = "PE")]
+    Pernambuco,
+    #[strum(serialize = "PI")]
+    Piauí,
+    #[strum(serialize = "RJ")]
+    RioDeJaneiro,
+    #[strum(serialize = "RN")]
+    RioGrandeDoNorte,
+    #[strum(serialize = "RS")]
+    RioGrandeDoSul,
+    #[strum(serialize = "RO")]
+    Rondônia,
+    #[strum(serialize = "RR")]
+    Roraima,
+    #[strum(serialize = "SC")]
+    SantaCatarina,
+    #[strum(serialize = "SP")]
+    SãoPaulo,
+    #[strum(serialize = "SE")]
+    Sergipe,
+    #[strum(serialize = "TO")]
+    Tocantins,
+}
+
 #[derive(
     Clone,
     Copy,
diff --git a/crates/connector_configs/src/connector.rs b/crates/connector_configs/src/connector.rs
index 782ca4cb711..70bfe9befac 100644
--- a/crates/connector_configs/src/connector.rs
+++ b/crates/connector_configs/src/connector.rs
@@ -196,7 +196,7 @@ pub struct ConnectorConfig {
     pub dlocal: Option<ConnectorTomlConfig>,
     pub ebanx_payout: Option<ConnectorTomlConfig>,
     pub elavon: Option<ConnectorTomlConfig>,
-    // pub facilitapay: Option<ConnectorTomlConfig>,
+    pub facilitapay: Option<ConnectorTomlConfig>,
     pub fiserv: Option<ConnectorTomlConfig>,
     pub fiservemea: Option<ConnectorTomlConfig>,
     pub fiuu: Option<ConnectorTomlConfig>,
@@ -373,7 +373,7 @@ impl ConnectorConfig {
             Connector::Dlocal => Ok(connector_data.dlocal),
             Connector::Ebanx => Ok(connector_data.ebanx_payout),
             Connector::Elavon => Ok(connector_data.elavon),
-            // Connector::Facilitapay => Ok(connector_data.facilitapay),
+            Connector::Facilitapay => Ok(connector_data.facilitapay),
             Connector::Fiserv => Ok(connector_data.fiserv),
             Connector::Fiservemea => Ok(connector_data.fiservemea),
             Connector::Fiuu => Ok(connector_data.fiuu),
diff --git a/crates/connector_configs/toml/development.toml b/crates/connector_configs/toml/development.toml
index 5675ad1d766..9ba3e86cac8 100644
--- a/crates/connector_configs/toml/development.toml
+++ b/crates/connector_configs/toml/development.toml
@@ -5828,3 +5828,10 @@ type="Text"
 api_key="Merchant ID"
 key1="Terminal ID"
 api_secret="Secret Key"
+
+[facilitapay]
+[[facilitapay.bank_transfer]]
+  payment_method_type = "pix"
+[facilitapay.connector_auth.Bodykey]
+  api_key="Password"
+  key1="Username"
diff --git a/crates/connector_configs/toml/production.toml b/crates/connector_configs/toml/production.toml
index efc797a5a1e..da0fd93f70f 100644
--- a/crates/connector_configs/toml/production.toml
+++ b/crates/connector_configs/toml/production.toml
@@ -4353,3 +4353,10 @@ payment_method_type = "UnionPay"
 api_key = "Merchant ID"
 key1 = "Terminal ID"
 api_secret = "Secret Key"
+
+[facilitapay]
+[[facilitapay.bank_transfer]]
+  payment_method_type = "pix"
+[facilitapay.connector_auth.Bodykey]
+  api_key="Password"
+  key1="Username"
diff --git a/crates/connector_configs/toml/sandbox.toml b/crates/connector_configs/toml/sandbox.toml
index 4aa34446cbd..a2bdf1863bb 100644
--- a/crates/connector_configs/toml/sandbox.toml
+++ b/crates/connector_configs/toml/sandbox.toml
@@ -5800,3 +5800,10 @@ payment_method_type = "UnionPay"
 api_key = "Merchant ID"
 key1 = "Terminal ID"
 api_secret = "Secret Key"
+
+[facilitapay]
+[[facilitapay.bank_transfer]]
+  payment_method_type = "pix"
+[facilitapay.connector_auth.Bodykey]
+  api_key="Password"
+  key1="Username"
diff --git a/crates/hyperswitch_connectors/src/connectors/facilitapay.rs b/crates/hyperswitch_connectors/src/connectors/facilitapay.rs
index 7f0ed1a2f09..9b1a6486df4 100644
--- a/crates/hyperswitch_connectors/src/connectors/facilitapay.rs
+++ b/crates/hyperswitch_connectors/src/connectors/facilitapay.rs
@@ -1,28 +1,37 @@
+mod requests;
+mod responses;
 pub mod transformers;
 
+use common_enums::enums;
 use common_utils::{
     errors::CustomResult,
     ext_traits::BytesExt,
     request::{Method, Request, RequestBuilder, RequestContent},
-    types::{AmountConvertor, StringMinorUnit, StringMinorUnitForConnector},
+    types::{AmountConvertor, StringMajorUnit, StringMajorUnitForConnector},
 };
 use error_stack::{report, ResultExt};
 use hyperswitch_domain_models::{
-    router_data::{AccessToken, ConnectorAuthType, ErrorResponse, RouterData},
+    router_data::{AccessToken, ErrorResponse, RouterData},
     router_flow_types::{
         access_token_auth::AccessTokenAuth,
-        payments::{Authorize, Capture, PSync, PaymentMethodToken, Session, SetupMandate, Void},
+        payments::{
+            Authorize, Capture, CreateConnectorCustomer, PSync, PaymentMethodToken, Session,
+            SetupMandate, Void,
+        },
         refunds::{Execute, RSync},
     },
     router_request_types::{
-        AccessTokenRequestData, PaymentMethodTokenizationData, PaymentsAuthorizeData,
-        PaymentsCancelData, PaymentsCaptureData, PaymentsSessionData, PaymentsSyncData,
-        RefundsData, SetupMandateRequestData,
+        AccessTokenRequestData, ConnectorCustomerData, PaymentMethodTokenizationData,
+        PaymentsAuthorizeData, PaymentsCancelData, PaymentsCaptureData, PaymentsSessionData,
+        PaymentsSyncData, RefundsData, SetupMandateRequestData,
+    },
+    router_response_types::{
+        ConnectorInfo, PaymentMethodDetails, PaymentsResponseData, RefundsResponseData,
+        SupportedPaymentMethods, SupportedPaymentMethodsExt,
     },
-    router_response_types::{PaymentsResponseData, RefundsResponseData},
     types::{
-        PaymentsAuthorizeRouterData, PaymentsCaptureRouterData, PaymentsSyncRouterData,
-        RefundSyncRouterData, RefundsRouterData,
+        ConnectorCustomerRouterData, PaymentsAuthorizeRouterData, PaymentsCaptureRouterData,
+        PaymentsSyncRouterData, RefundSyncRouterData, RefundsRouterData,
     },
 };
 use hyperswitch_interfaces::{
@@ -33,27 +42,41 @@ use hyperswitch_interfaces::{
     configs::Connectors,
     errors,
     events::connector_api_logs::ConnectorEvent,
-    types::{self, Response},
+    types::{self, RefreshTokenType, Response},
     webhooks,
 };
-use masking::{ExposeInterface, Mask};
-use transformers as facilitapay;
+use lazy_static::lazy_static;
+use masking::{Mask, PeekInterface};
+use requests::{
+    FacilitapayAuthRequest, FacilitapayCustomerRequest, FacilitapayPaymentsRequest,
+    FacilitapayRefundRequest, FacilitapayRouterData,
+};
+use responses::{
+    FacilitapayAuthResponse, FacilitapayCustomerResponse, FacilitapayPaymentsResponse,
+    FacilitapayRefundResponse,
+};
+use transformers::parse_facilitapay_error_response;
 
-use crate::{constants::headers, types::ResponseRouterData, utils};
+use crate::{
+    constants::headers,
+    types::{RefreshTokenRouterData, ResponseRouterData},
+    utils::{self, RefundsRequestData},
+};
 
 #[derive(Clone)]
 pub struct Facilitapay {
-    amount_converter: &'static (dyn AmountConvertor<Output = StringMinorUnit> + Sync),
+    amount_converter: &'static (dyn AmountConvertor<Output = StringMajorUnit> + Sync),
 }
 
 impl Facilitapay {
     pub fn new() -> &'static Self {
         &Self {
-            amount_converter: &StringMinorUnitForConnector,
+            amount_converter: &StringMajorUnitForConnector,
         }
     }
 }
 
+impl api::ConnectorCustomer for Facilitapay {}
 impl api::Payment for Facilitapay {}
 impl api::PaymentSession for Facilitapay {}
 impl api::ConnectorAccessToken for Facilitapay {}
@@ -82,13 +105,23 @@ where
         req: &RouterData<Flow, Request, Response>,
         _connectors: &Connectors,
     ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
-        let mut header = vec![(
-            headers::CONTENT_TYPE.to_string(),
-            self.get_content_type().to_string().into(),
-        )];
-        let mut api_key = self.get_auth_header(&req.connector_auth_type)?;
-        header.append(&mut api_key);
-        Ok(header)
+        let access_token = req
+            .access_token
+            .clone()
+            .ok_or(errors::ConnectorError::FailedToObtainAuthType)?;
+
+        let headers = vec![
+            (
+                headers::CONTENT_TYPE.to_string(),
+                self.get_content_type().to_string().into(),
+            ),
+            (
+                headers::AUTHORIZATION.to_string(),
+                format!("Bearer {}", access_token.token.clone().peek()).into_masked(),
+            ),
+        ];
+
+        Ok(headers)
     }
 }
 
@@ -99,9 +132,6 @@ impl ConnectorCommon for Facilitapay {
 
     fn get_currency_unit(&self) -> api::CurrencyUnit {
         api::CurrencyUnit::Base
-        //    TODO! Check connector documentation, on which unit they are processing the currency.
-        //    If the connector accepts amount in lower unit ( i.e cents for USD) then return api::CurrencyUnit::Minor,
-        //    if connector accepts amount in base unit (i.e dollars for USD) then return api::CurrencyUnit::Base
     }
 
     fn common_get_content_type(&self) -> &'static str {
@@ -112,58 +142,201 @@ impl ConnectorCommon for Facilitapay {
         connectors.facilitapay.base_url.as_ref()
     }
 
-    fn get_auth_header(
+    fn build_error_response(
+        &self,
+        res: Response,
+        event_builder: Option<&mut ConnectorEvent>,
+    ) -> CustomResult<ErrorResponse, errors::ConnectorError> {
+        parse_facilitapay_error_response(res, event_builder)
+    }
+}
+
+impl ConnectorIntegration<CreateConnectorCustomer, ConnectorCustomerData, PaymentsResponseData>
+    for Facilitapay
+{
+    fn get_headers(
         &self,
-        auth_type: &ConnectorAuthType,
+        req: &ConnectorCustomerRouterData,
+        connectors: &Connectors,
     ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
-        let auth = facilitapay::FacilitapayAuthType::try_from(auth_type)
-            .change_context(errors::ConnectorError::FailedToObtainAuthType)?;
-        Ok(vec![(
-            headers::AUTHORIZATION.to_string(),
-            auth.api_key.expose().into_masked(),
-        )])
+        self.build_headers(req, connectors)
     }
 
-    fn build_error_response(
+    fn get_content_type(&self) -> &'static str {
+        self.common_get_content_type()
+    }
+
+    fn get_url(
         &self,
-        res: Response,
+        _req: &ConnectorCustomerRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<String, errors::ConnectorError> {
+        Ok(format!("{}/subject/people", self.base_url(connectors)))
+    }
+
+    fn get_request_body(
+        &self,
+        req: &ConnectorCustomerRouterData,
+        _connectors: &Connectors,
+    ) -> CustomResult<RequestContent, errors::ConnectorError> {
+        let connector_req = FacilitapayCustomerRequest::try_from(req)?;
+        Ok(RequestContent::Json(Box::new(connector_req)))
+    }
+
+    fn build_request(
+        &self,
+        req: &ConnectorCustomerRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
+        Ok(Some(
+            RequestBuilder::new()
+                .method(Method::Post)
+                .url(&types::ConnectorCustomerType::get_url(
+                    self, req, connectors,
+                )?)
+                .attach_default_headers()
+                .headers(types::ConnectorCustomerType::get_headers(
+                    self, req, connectors,
+                )?)
+                .set_body(types::ConnectorCustomerType::get_request_body(
+                    self, req, connectors,
+                )?)
+                .build(),
+        ))
+    }
+
+    fn handle_response(
+        &self,
+        data: &ConnectorCustomerRouterData,
         event_builder: Option<&mut ConnectorEvent>,
-    ) -> CustomResult<ErrorResponse, errors::ConnectorError> {
-        let response: facilitapay::FacilitapayErrorResponse = res
+        res: Response,
+    ) -> CustomResult<ConnectorCustomerRouterData, errors::ConnectorError>
+    where
+        ConnectorCustomerRouterData: Clone,
+    {
+        let response: FacilitapayCustomerResponse = res
             .response
-            .parse_struct("FacilitapayErrorResponse")
+            .parse_struct("FacilitapayCustomerResponse")
             .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
 
         event_builder.map(|i| i.set_response_body(&response));
         router_env::logger::info!(connector_response=?response);
 
-        Ok(ErrorResponse {
-            status_code: res.status_code,
-            code: response.code,
-            message: response.message,
-            reason: response.reason,
-            attempt_status: None,
-            connector_transaction_id: None,
-            network_advice_code: None,
-            network_decline_code: None,
-            network_error_message: None,
+        RouterData::try_from(ResponseRouterData {
+            response,
+            data: data.clone(),
+            http_code: res.status_code,
         })
     }
-}
 
-impl ConnectorValidation for Facilitapay {
-    //TODO: implement functions when support enabled
+    fn get_error_response(
+        &self,
+        res: Response,
+        event_builder: Option<&mut ConnectorEvent>,
+    ) -> CustomResult<ErrorResponse, errors::ConnectorError> {
+        self.build_error_response(res, event_builder)
+    }
 }
 
+impl ConnectorValidation for Facilitapay {}
+
 impl ConnectorIntegration<Session, PaymentsSessionData, PaymentsResponseData> for Facilitapay {
     //TODO: implement sessions flow
 }
 
-impl ConnectorIntegration<AccessTokenAuth, AccessTokenRequestData, AccessToken> for Facilitapay {}
+impl ConnectorIntegration<AccessTokenAuth, AccessTokenRequestData, AccessToken> for Facilitapay {
+    fn get_headers(
+        &self,
+        _req: &RefreshTokenRouterData,
+        _connectors: &Connectors,
+    ) -> CustomResult<Vec<(String, masking::Maskable<String>)>, errors::ConnectorError> {
+        Ok(vec![(
+            headers::CONTENT_TYPE.to_string(),
+            self.common_get_content_type().to_string().into(),
+        )])
+    }
+
+    fn get_content_type(&self) -> &'static str {
+        self.common_get_content_type()
+    }
+
+    fn get_url(
+        &self,
+        _req: &RefreshTokenRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<String, errors::ConnectorError> {
+        Ok(format!("{}/sign_in", self.base_url(connectors)))
+    }
+
+    fn get_request_body(
+        &self,
+        req: &RefreshTokenRouterData,
+        _connectors: &Connectors,
+    ) -> CustomResult<RequestContent, errors::ConnectorError> {
+        let connector_req = FacilitapayAuthRequest::try_from(req)?;
+        Ok(RequestContent::Json(Box::new(connector_req)))
+    }
+
+    fn build_request(
+        &self,
+        req: &RefreshTokenRouterData,
+        connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
+        Ok(Some(
+            RequestBuilder::new()
+                .method(Method::Post)
+                .attach_default_headers()
+                .headers(RefreshTokenType::get_headers(self, req, connectors)?)
+                .url(&RefreshTokenType::get_url(self, req, connectors)?)
+                .set_body(RefreshTokenType::get_request_body(self, req, connectors)?)
+                .build(),
+        ))
+    }
+
+    fn handle_response(
+        &self,
+        data: &RefreshTokenRouterData,
+        event_builder: Option<&mut ConnectorEvent>,
+        res: Response,
+    ) -> CustomResult<RefreshTokenRouterData, errors::ConnectorError> {
+        let response: FacilitapayAuthResponse = res
+            .response
+            .parse_struct("FacilitapayAuthResponse")
+            .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,
+        })
+        .change_context(errors::ConnectorError::ResponseHandlingFailed)
+    }
+
+    fn get_error_response(
+        &self,
+        res: Response,
+        event_builder: Option<&mut ConnectorEvent>,
+    ) -> CustomResult<ErrorResponse, errors::ConnectorError> {
+        self.build_error_response(res, event_builder)
+    }
+}
 
 impl ConnectorIntegration<SetupMandate, SetupMandateRequestData, PaymentsResponseData>
     for Facilitapay
 {
+    fn build_request(
+        &self,
+        _req: &RouterData<SetupMandate, SetupMandateRequestData, PaymentsResponseData>,
+        _connectors: &Connectors,
+    ) -> CustomResult<Option<Request>, errors::ConnectorError> {
+        Err(errors::ConnectorError::NotImplemented(
+            "Setup Mandate flow for Facilitapay".to_string(),
+        )
+        .into())
+    }
 }
 
 impl ConnectorIntegration<Authorize, PaymentsAuthorizeData, PaymentsResponseData> for Facilitapay {
@@ -182,9 +355,9 @@ impl ConnectorIntegration<Authorize, PaymentsAuthorizeData, PaymentsResponseData
     fn get_url(
         &self,
         _req: &PaymentsAuthorizeRouterData,
-        _connectors: &Connectors,
+        connectors: &Connectors,
     ) -> CustomResult<String, errors::ConnectorError> {
-        Err(errors::ConnectorError::NotImplemented("get_url method".to_string()).into())
+        Ok(format!("{}/transactions", self.base_url(connectors)))
     }
 
     fn get_request_body(
@@ -198,9 +371,9 @@ impl ConnectorIntegration<Authorize, PaymentsAuthorizeData, PaymentsResponseData
             req.request.currency,
         )?;
 
-        let connector_router_data = facilitapay::FacilitapayRouterData::from((amount, req));
-        let connector_req =
-            facilitapay::FacilitapayPaymentsRequest::try_from(&connector_router_data)?;
+        let connector_router_data = FacilitapayRouterData::from((amount, req));
+        let connector_req = FacilitapayPaymentsRequest::try_from(&connector_router_data)?;
+
         Ok(RequestContent::Json(Box::new(connector_req)))
     }
 
@@ -232,12 +405,14 @@ impl ConnectorIntegration<Authorize, PaymentsAuthorizeData, PaymentsResponseData
         event_builder: Option<&mut ConnectorEvent>,
         res: Response,
     ) -> CustomResult<PaymentsAuthorizeRouterData, errors::ConnectorError> {
-        let response: facilitapay::FacilitapayPaymentsResponse = res
+        let response: FacilitapayPaymentsResponse = res
             .response
-            .parse_struct("Facilitapay PaymentsAuthorizeResponse")
+            .parse_struct("FacilitapayPaymentsAuthorizeResponse")
             .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(),
@@ -269,10 +444,19 @@ impl ConnectorIntegration<PSync, PaymentsSyncData, PaymentsResponseData> for Fac
 
     fn get_url(
         &self,
-        _req: &PaymentsSyncRouterData,
-        _connectors: &Connectors,
+        req: &PaymentsSyncRouterData,
+        connectors: &Connectors,
     ) -> CustomResult<String, errors::ConnectorError> {
-        Err(errors::ConnectorError::NotImplemented("get_url method".to_string()).into())
+        let connector_transaction_id = req
+            .request
+            .connector_transaction_id
+            .get_connector_transaction_id()
+            .change_context(errors::ConnectorError::MissingConnectorTransactionID)?;
+        Ok(format!(
+            "{}/transactions/{}",
+            self.base_url(connectors),
+            connector_transaction_id
+        ))
     }
 
     fn build_request(
@@ -296,12 +480,14 @@ impl ConnectorIntegration<PSync, PaymentsSyncData, PaymentsResponseData> for Fac
         event_builder: Option<&mut ConnectorEvent>,
         res: Response,
     ) -> CustomResult<PaymentsSyncRouterData, errors::ConnectorError> {
-        let response: facilitapay::FacilitapayPaymentsResponse = res
+        let response: FacilitapayPaymentsResponse = res
             .response
-            .parse_struct("facilitapay PaymentsSyncResponse")
+            .parse_struct("FacilitapayPaymentsSyncResponse")
             .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(),
@@ -373,9 +559,9 @@ impl ConnectorIntegration<Capture, PaymentsCaptureData, PaymentsResponseData> fo
         event_builder: Option<&mut ConnectorEvent>,
         res: Response,
     ) -> CustomResult<PaymentsCaptureRouterData, errors::ConnectorError> {
-        let response: facilitapay::FacilitapayPaymentsResponse = res
+        let response: FacilitapayPaymentsResponse = res
             .response
-            .parse_struct("Facilitapay PaymentsCaptureResponse")
+            .parse_struct("FacilitapayPaymentsCaptureResponse")
             .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
         event_builder.map(|i| i.set_response_body(&response));
         router_env::logger::info!(connector_response=?response);
@@ -412,10 +598,14 @@ impl ConnectorIntegration<Execute, RefundsData, RefundsResponseData> for Facilit
 
     fn get_url(
         &self,
-        _req: &RefundsRouterData<Execute>,
-        _connectors: &Connectors,
+        req: &RefundsRouterData<Execute>,
+        connectors: &Connectors,
     ) -> CustomResult<String, errors::ConnectorError> {
-        Err(errors::ConnectorError::NotImplemented("get_url method".to_string()).into())
+        Ok(format!(
+            "{}/transactions/{}/refund_received_transaction",
+            self.base_url(connectors),
+            req.request.connector_transaction_id
+        ))
     }
 
     fn get_request_body(
@@ -429,9 +619,8 @@ impl ConnectorIntegration<Execute, RefundsData, RefundsResponseData> for Facilit
             req.request.currency,
         )?;
 
-        let connector_router_data = facilitapay::FacilitapayRouterData::from((refund_amount, req));
-        let connector_req =
-            facilitapay::FacilitapayRefundRequest::try_from(&connector_router_data)?;
+        let connector_router_data = FacilitapayRouterData::from((refund_amount, req));
+        let connector_req = FacilitapayRefundRequest::try_from(&connector_router_data)?;
         Ok(RequestContent::Json(Box::new(connector_req)))
     }
 
@@ -460,9 +649,9 @@ impl ConnectorIntegration<Execute, RefundsData, RefundsResponseData> for Facilit
         event_builder: Option<&mut ConnectorEvent>,
         res: Response,
     ) -> CustomResult<RefundsRouterData<Execute>, errors::ConnectorError> {
-        let response: facilitapay::RefundResponse = res
+        let response: FacilitapayRefundResponse = res
             .response
-            .parse_struct("facilitapay RefundResponse")
+            .parse_struct("FacilitapayRefundResponse")
             .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
         event_builder.map(|i| i.set_response_body(&response));
         router_env::logger::info!(connector_response=?response);
@@ -497,10 +686,16 @@ impl ConnectorIntegration<RSync, RefundsData, RefundsResponseData> for Facilitap
 
     fn get_url(
         &self,
-        _req: &RefundSyncRouterData,
-        _connectors: &Connectors,
+        req: &RefundSyncRouterData,
+        connectors: &Connectors,
     ) -> CustomResult<String, errors::ConnectorError> {
-        Err(errors::ConnectorError::NotImplemented("get_url method".to_string()).into())
+        let refund_id = req.request.get_connector_refund_id()?;
+        Ok(format!(
+            "{}/transactions/{}/refund_received_transaction/{}",
+            self.base_url(connectors),
+            req.request.connector_transaction_id,
+            refund_id
+        ))
     }
 
     fn build_request(
@@ -514,9 +709,6 @@ impl ConnectorIntegration<RSync, RefundsData, RefundsResponseData> for Facilitap
                 .url(&types::RefundSyncType::get_url(self, req, connectors)?)
                 .attach_default_headers()
                 .headers(types::RefundSyncType::get_headers(self, req, connectors)?)
-                .set_body(types::RefundSyncType::get_request_body(
-                    self, req, connectors,
-                )?)
                 .build(),
         ))
     }
@@ -527,9 +719,9 @@ impl ConnectorIntegration<RSync, RefundsData, RefundsResponseData> for Facilitap
         event_builder: Option<&mut ConnectorEvent>,
         res: Response,
     ) -> CustomResult<RefundSyncRouterData, errors::ConnectorError> {
-        let response: facilitapay::RefundResponse = res
+        let response: FacilitapayRefundResponse = res
             .response
-            .parse_struct("facilitapay RefundSyncResponse")
+            .parse_struct("FacilitapayRefundSyncResponse")
             .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
         event_builder.map(|i| i.set_response_body(&response));
         router_env::logger::info!(connector_response=?response);
@@ -573,4 +765,48 @@ impl webhooks::IncomingWebhook for Facilitapay {
     }
 }
 
-impl ConnectorSpecifications for Facilitapay {}
+lazy_static! {
+    static ref FACILITAPAY_CONNECTOR_INFO: ConnectorInfo = ConnectorInfo {
+        display_name:
+            "Facilitapay",
+        description:
+            "FacilitaPay, the best and most reliable payment provider for your international business.",
+        connector_type: enums::PaymentConnectorCategory::PaymentGateway,
+    };
+    static ref FACILITAPAY_SUPPORTED_PAYMENT_METHODS: SupportedPaymentMethods = {
+        let facilitapay_supported_capture_methods = vec![
+            enums::CaptureMethod::Automatic,
+            enums::CaptureMethod::SequentialAutomatic,
+        ];
+
+        let mut facilitapay_supported_payment_methods = SupportedPaymentMethods::new();
+
+        facilitapay_supported_payment_methods.add(
+            enums::PaymentMethod::BankTransfer,
+            enums::PaymentMethodType::Pix,
+            PaymentMethodDetails {
+                mandates: common_enums::FeatureStatus::NotSupported,
+                refunds: common_enums::FeatureStatus::Supported,
+                supported_capture_methods: facilitapay_supported_capture_methods.clone(),
+                specific_features: None,
+            },
+        );
+
+        facilitapay_supported_payment_methods
+    };
+    static ref FACILITAPAY_SUPPORTED_WEBHOOK_FLOWS: Vec<enums::EventClass> = Vec::new();
+}
+
+impl ConnectorSpecifications for Facilitapay {
+    fn get_connector_about(&self) -> Option<&'static ConnectorInfo> {
+        Some(&*FACILITAPAY_CONNECTOR_INFO)
+    }
+
+    fn get_supported_payment_methods(&self) -> Option<&'static SupportedPaymentMethods> {
+        Some(&*FACILITAPAY_SUPPORTED_PAYMENT_METHODS)
+    }
+
+    fn get_supported_webhook_flows(&self) -> Option<&'static [enums::EventClass]> {
+        Some(&*FACILITAPAY_SUPPORTED_WEBHOOK_FLOWS)
+    }
+}
diff --git a/crates/hyperswitch_connectors/src/connectors/facilitapay/requests.rs b/crates/hyperswitch_connectors/src/connectors/facilitapay/requests.rs
new file mode 100644
index 00000000000..29c2f34f332
--- /dev/null
+++ b/crates/hyperswitch_connectors/src/connectors/facilitapay/requests.rs
@@ -0,0 +1,150 @@
+use common_enums::CountryAlpha2;
+use common_utils::{new_type::MaskedBankAccount, pii, types::StringMajorUnit};
+use masking::Secret;
+use serde::{Deserialize, Serialize};
+use time::PrimitiveDateTime;
+
+pub struct FacilitapayRouterData<T> {
+    pub amount: StringMajorUnit,
+    pub router_data: T,
+}
+
+#[derive(Debug, Serialize)]
+pub struct FacilitapayAuthRequest {
+    pub user: FacilitapayCredentials,
+}
+
+#[derive(Debug, Serialize)]
+pub struct FacilitapayCredentials {
+    pub username: Secret<String>, // email_id
+    pub password: Secret<String>,
+}
+
+#[derive(Debug, Serialize, PartialEq)]
+pub struct FacilitapayCardDetails {
+    #[serde(rename = "card_number")]
+    pub number: cards::CardNumber,
+    #[serde(rename = "card_expiration_date")]
+    pub expiry_date: Secret<String>, // Format: "MM/YYYY"
+    #[serde(rename = "card_security_code")]
+    pub cvc: Secret<String>,
+    #[serde(rename = "card_brand")]
+    pub brand: String,
+    pub fullname: Secret<String>,
+}
+
+#[derive(Debug, Serialize, PartialEq)]
+pub struct CardTransactionRequest {
+    pub currency: api_models::enums::Currency,
+    pub exchange_currency: api_models::enums::Currency,
+    pub value: StringMajorUnit,
+    pub from_credit_card: FacilitapayCardDetails,
+    pub to_bank_account_id: Secret<String>, // UUID
+    pub subject_id: String,                 // UUID
+}
+
+#[derive(Debug, Serialize, PartialEq)]
+pub struct PixTransactionRequest {
+    pub subject_id: Secret<String>,              // Customer ID (UUID)
+    pub from_bank_account_id: MaskedBankAccount, // UUID
+    pub to_bank_account_id: MaskedBankAccount,   // UUID
+    pub currency: api_models::enums::Currency,
+    pub exchange_currency: api_models::enums::Currency,
+    pub value: StringMajorUnit,
+    pub use_dynamic_pix: bool,
+    #[serde(default, with = "common_utils::custom_serde::iso8601")]
+    pub dynamic_pix_expires_at: PrimitiveDateTime,
+}
+
+#[derive(Debug, Serialize, PartialEq)]
+#[serde(untagged)]
+pub enum FacilitapayTransactionRequest {
+    #[allow(dead_code)]
+    Card(CardTransactionRequest),
+    Pix(PixTransactionRequest),
+}
+
+#[derive(Debug, Serialize, PartialEq)]
+pub struct FacilitapayPaymentsRequest {
+    pub transaction: FacilitapayTransactionRequest,
+}
+
+// Type definition for RefundRequest
+#[derive(Default, Debug, Serialize)]
+pub struct FacilitapayRefundRequest {
+    pub amount: StringMajorUnit,
+}
+
+#[derive(Debug, Serialize, PartialEq)]
+#[serde(rename_all = "snake_case")]
+pub struct FacilitapayCustomerRequest {
+    pub person: FacilitapayPerson,
+}
+
+#[derive(Debug, Serialize, Clone, Deserialize, PartialEq, Eq)]
+#[serde(rename_all = "snake_case")]
+pub enum DocumentType {
+    /// CC is the Cedula de Ciudadania, is a 10-digit number, which is the national identity card for Colombian citizens.
+    /// It is used for citizen identification purposes.
+    #[serde(rename = "cc")]
+    CedulaDeCiudadania,
+    /// CNPJ stands for Cadastro Nacional da Pessoa Jurídica, is a 14-digit number,
+    /// which is the national registry of legal entities in Brazil used as a unique identifier for Brazilian companies.
+    #[serde(rename = "cnpj")]
+    CadastroNacionaldaPessoaJurídica,
+    /// CPF stands for Cadastro de Pessoas Físicas, is a 11-digit number,
+    /// which is the national registry of natural persons in Brazil used as a unique identifier for Brazilian citizens.
+    #[serde(rename = "cpf")]
+    CadastrodePessoasFísicas,
+    /// CURP stands for Clave Única de Registro de Población,is a 18-digit number used as a unique identifier for Mexican citizens.
+    /// It is used to track tax information and other identification purposes by the government.
+    #[serde(rename = "curp")]
+    ClaveÚnicadeRegistrodePoblación,
+    /// NIT is the Número de Identificación Tributaria, is a 10-digit number, which is the tax identification number in Colombia. Used for companies.
+    #[serde(rename = "nit")]
+    NúmerodeIdentificaciónTributaria,
+    /// Passport is the travel document usually issued by a country's government
+    Passport,
+    /// RFC stands for Registro Federal de Contribuyentes, is a 13-digit number used as a unique identifier for Mexican companies.
+    #[serde(rename = "rfc")]
+    RegistroFederaldeContribuyentes,
+    /// RUT stands for Rol Unico Tributario, is a 9-digit number used as a unique identifier for Chilean citizens and companies.
+    #[serde(rename = "rut")]
+    RolUnicoTributario,
+    /// A Taxpayer Identification Number is an identifying number used for tax purposes
+    TaxId,
+}
+
+#[derive(Debug, Serialize, PartialEq)]
+#[serde(rename_all = "snake_case")]
+pub struct FacilitapayPerson {
+    pub document_number: Secret<String>,
+    pub document_type: DocumentType,
+    pub social_name: Secret<String>,
+    pub fiscal_country: CountryAlpha2,
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub email: Option<pii::Email>,
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub birth_date: Option<time::Date>,
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub phone_country_code: Option<Secret<String>>,
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub phone_area_code: Option<Secret<String>>,
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub phone_number: Option<Secret<String>>,
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub address_city: Option<String>,
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub address_state: Option<String>,
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub address_complement: Option<Secret<String>>,
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub address_country: Option<String>,
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub address_number: Option<Secret<String>>,
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub address_postal_code: Option<Secret<String>>,
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub address_street: Option<Secret<String>>,
+    pub net_monthly_average_income: Option<StringMajorUnit>,
+}
diff --git a/crates/hyperswitch_connectors/src/connectors/facilitapay/responses.rs b/crates/hyperswitch_connectors/src/connectors/facilitapay/responses.rs
new file mode 100644
index 00000000000..dfa01402ce9
--- /dev/null
+++ b/crates/hyperswitch_connectors/src/connectors/facilitapay/responses.rs
@@ -0,0 +1,217 @@
+use common_utils::{pii, types::StringMajorUnit};
+use masking::Secret;
+use serde::{Deserialize, Serialize};
+
+use super::requests::DocumentType;
+
+// Response body for POST /sign_in
+#[derive(Debug, Deserialize, Serialize)]
+pub struct FacilitapayAuthResponse {
+    username: Secret<String>,
+    name: Secret<String>,
+    pub jwt: Secret<String>,
+}
+
+#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
+#[serde(rename_all = "snake_case")]
+pub enum SubjectKycStatus {
+    // Customer is able to send/receive money through the platform. No action is needed on your side.
+    Approved,
+
+    // Customer is required to upload documents or uploaded documents have been rejected by KYC.
+    Reproved,
+
+    // Customer has uploaded KYC documents but awaiting analysis from the backoffice. No action is needed on your side.
+    WaitingApproval,
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
+#[serde(rename_all = "snake_case")]
+pub struct FacilitapaySubject {
+    pub social_name: Secret<String>,
+    pub document_type: DocumentType,
+    pub document_number: Secret<String>,
+    // In documentation, both CountryAlpha2 and String are used. We cannot rely on CountryAlpha2.
+    pub fiscal_country: String,
+    pub updated_at: Option<String>,
+    pub status: SubjectKycStatus,
+    #[serde(rename = "id")]
+    pub customer_id: Secret<String>,
+    pub birth_date: Option<time::Date>,
+    pub email: Option<pii::Email>,
+    pub phone_country_code: Option<Secret<String>>,
+    pub phone_area_code: Option<Secret<String>>,
+    pub phone_number: Option<Secret<String>>,
+    pub address_street: Option<Secret<String>>,
+    pub address_number: Option<Secret<String>>,
+    pub address_complement: Option<Secret<String>>,
+    pub address_city: Option<String>,
+    pub address_state: Option<String>,
+    pub address_postal_code: Option<Secret<String>>,
+    pub address_country: Option<String>,
+    pub address_neighborhood: Option<Secret<String>>,
+    pub net_monthly_average_income: Option<StringMajorUnit>,
+    pub clearance_level: Option<i32>,
+    pub required_clearance_level: Option<i32>,
+    pub inserted_at: Option<String>,
+    pub references: Option<Vec<serde_json::Value>>,
+    pub rfc_pf: Option<Secret<String>>, // 13-digit RFC, specific to Mexico users
+    pub documents: Option<Vec<serde_json::Value>>,
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
+#[serde(rename_all = "snake_case")]
+pub struct FacilitapayCustomerResponse {
+    pub data: FacilitapaySubject,
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
+pub struct PixInfo {
+    #[serde(rename = "type")]
+    pub key_type: String,
+    pub key: Secret<String>,
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
+pub struct CreditCardResponseInfo {
+    pub id: String,
+    pub status: Option<String>,
+    pub document_type: String,
+    pub document_number: Secret<String>,
+    pub birthdate: Option<String>,
+    pub phone_country_code: Option<String>,
+    pub phone_area_code: Option<String>,
+    pub phone_number: Option<Secret<String>>,
+    pub inserted_at: Option<String>,
+}
+
+// PaymentsResponse
+#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
+#[serde(rename_all = "snake_case")]
+#[derive(strum::Display)]
+pub enum FacilitapayPaymentStatus {
+    /// Transaction has been created but it is waiting for an incoming TED/Wire.
+    /// This is the first recorded status in production mode.
+    #[default]
+    Pending,
+    /// Incoming TED/Wire has been identified into Facilita´s bank account.
+    /// When it is a deposit into an internal bank account and there is no
+    /// conversion involved (BRL to BRL for instance), that is the final state.
+    Identified,
+    /// The conversion rate has been closed and therefore the exchanged value
+    /// is defined - when it is a deposit into an internal bank account, that is the final state.
+    Exchanged,
+    /// The exchanged value has been wired to its destination (a real bank account) - that is also a final state.
+    Wired,
+    /// When for any reason the transaction cannot be concluded or need to be reversed, it is canceled.
+    #[serde(rename = "canceled")]
+    Cancelled,
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
+pub struct FacilitapayPaymentsResponse {
+    pub data: TransactionData,
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
+pub struct OwnerCompany {
+    pub social_name: Option<Secret<String>>,
+    #[serde(rename = "id")]
+    pub company_id: Option<String>,
+    pub document_type: DocumentType,
+    pub document_number: Secret<String>,
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
+pub struct BankInfo {
+    pub swift: Option<Secret<String>>,
+    pub name: Option<String>,
+    #[serde(rename = "id")]
+    pub bank_id: Secret<String>,
+    pub code: Option<Secret<String>>,
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
+pub struct BankAccountDetail {
+    pub routing_number: Option<Secret<String>>,
+    pub pix_info: Option<PixInfo>,
+    pub owner_name: Option<Secret<String>>,
+    pub owner_document_number: Option<Secret<String>>,
+    pub owner_company: Option<OwnerCompany>,
+    pub internal: Option<bool>,
+    pub intermediary_bank_account: Option<Secret<String>>,
+    pub intermediary_bank_account_id: Option<Secret<String>>,
+    #[serde(rename = "id")]
+    pub bank_account_id: Secret<String>,
+    pub iban: Option<Secret<String>>,
+    pub flow_type: Option<String>,
+    pub currency: api_models::enums::Currency,
+    pub branch_number: Option<Secret<String>>,
+    pub branch_country: Option<String>,
+    pub bank: Option<BankInfo>,
+    pub account_type: Option<String>,
+    pub account_number: Option<Secret<String>>,
+    pub aba: Option<String>,
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
+pub struct TransactionData {
+    #[serde(rename = "id")]
+    pub transaction_id: String,
+    pub value: StringMajorUnit,
+    pub status: FacilitapayPaymentStatus,
+    pub currency: api_models::enums::Currency,
+    pub exchange_currency: api_models::enums::Currency,
+
+    // Details about the destination account (Required)
+    pub to_bank_account: BankAccountDetail,
+
+    // Details about the source - mutually exclusive
+    pub from_credit_card: Option<CreditCardResponseInfo>,
+    pub from_bank_account: Option<BankAccountDetail>, // Populated for PIX
+
+    // Subject information (customer)
+    pub subject_id: String,
+    pub subject: Option<FacilitapaySubject>,
+    pub subject_is_receiver: Option<bool>,
+
+    // Source identification (potentially redundant with subject or card/bank info)
+    pub source_name: Secret<String>,
+    pub source_document_type: DocumentType,
+    pub source_document_number: Secret<String>,
+
+    // Timestamps and flags
+    pub inserted_at: Option<String>,
+    pub for_exchange: Option<bool>,
+    pub exchange_under_request: Option<bool>,
+    pub estimated_value_until_exchange: Option<bool>,
+    pub cleared: Option<bool>,
+
+    // PIX specific field
+    pub dynamic_pix_code: Option<String>, // QR code string for PIX
+
+    // Exchange details
+    pub exchanged_value: Option<StringMajorUnit>,
+
+    // Cancelation details
+    #[serde(rename = "canceled_reason")]
+    pub cancelled_reason: Option<String>,
+    #[serde(rename = "canceled_at")]
+    pub cancelled_at: Option<String>,
+
+    // Other fields
+    pub bank_transaction: Option<Secret<serde_json::Value>>,
+    pub meta: Option<serde_json::Value>,
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct RefundData {
+    #[serde(rename = "id")]
+    pub refund_id: String,
+    pub status: FacilitapayPaymentStatus,
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct FacilitapayRefundResponse {
+    pub data: RefundData,
+}
diff --git a/crates/hyperswitch_connectors/src/connectors/facilitapay/transformers.rs b/crates/hyperswitch_connectors/src/connectors/facilitapay/transformers.rs
index 81c2f752d3b..a123b4796cf 100644
--- a/crates/hyperswitch_connectors/src/connectors/facilitapay/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/facilitapay/transformers.rs
@@ -1,31 +1,45 @@
-use common_enums::enums;
-use common_utils::types::StringMinorUnit;
+use api_models::payments::QrCodeInformation;
+use common_enums::{enums, PaymentMethod};
+use common_utils::{
+    errors::CustomResult,
+    ext_traits::{BytesExt, Encode},
+    types::StringMajorUnit,
+};
+use error_stack::ResultExt;
 use hyperswitch_domain_models::{
-    payment_method_data::PaymentMethodData,
-    router_data::{ConnectorAuthType, RouterData},
+    payment_method_data::{BankTransferData, PaymentMethodData},
+    router_data::{AccessToken, ConnectorAuthType, ErrorResponse, RouterData},
     router_flow_types::refunds::{Execute, RSync},
     router_request_types::ResponseId,
     router_response_types::{PaymentsResponseData, RefundsResponseData},
-    types::{PaymentsAuthorizeRouterData, RefundsRouterData},
+    types,
+};
+use hyperswitch_interfaces::{
+    consts, errors, events::connector_api_logs::ConnectorEvent, types::Response,
 };
-use hyperswitch_interfaces::errors;
-use masking::Secret;
-use serde::{Deserialize, Serialize};
+use masking::{ExposeInterface, Secret};
+use time::PrimitiveDateTime;
+use url::Url;
 
+use super::{
+    requests::{
+        DocumentType, FacilitapayAuthRequest, FacilitapayCredentials, FacilitapayCustomerRequest,
+        FacilitapayPaymentsRequest, FacilitapayPerson, FacilitapayRefundRequest,
+        FacilitapayRouterData, FacilitapayTransactionRequest, PixTransactionRequest,
+    },
+    responses::{
+        FacilitapayAuthResponse, FacilitapayCustomerResponse, FacilitapayPaymentStatus,
+        FacilitapayPaymentsResponse, FacilitapayRefundResponse,
+    },
+};
 use crate::{
-    types::{RefundsResponseRouterData, ResponseRouterData},
-    utils::PaymentsAuthorizeRequestData,
+    types::{RefreshTokenRouterData, RefundsResponseRouterData, ResponseRouterData},
+    utils::{is_payment_failure, missing_field_err, QrImage, RouterData as OtherRouterData},
 };
+type Error = error_stack::Report<errors::ConnectorError>;
 
-//TODO: Fill the struct with respective fields
-pub struct FacilitapayRouterData<T> {
-    pub amount: StringMinorUnit, // The type of amount that a connector accepts, for example, String, i64, f64, etc.
-    pub router_data: T,
-}
-
-impl<T> From<(StringMinorUnit, T)> for FacilitapayRouterData<T> {
-    fn from((amount, item): (StringMinorUnit, T)) -> Self {
-        //Todo :  use utils to convert the amount to the type of amount that a connector accepts
+impl<T> From<(StringMajorUnit, T)> for FacilitapayRouterData<T> {
+    fn from((amount, item): (StringMajorUnit, T)) -> Self {
         Self {
             amount,
             router_data: item,
@@ -33,196 +47,491 @@ impl<T> From<(StringMinorUnit, T)> for FacilitapayRouterData<T> {
     }
 }
 
-//TODO: Fill the struct with respective fields
-#[derive(Default, Debug, Serialize, PartialEq)]
-pub struct FacilitapayPaymentsRequest {
-    amount: StringMinorUnit,
-    card: FacilitapayCard,
-}
-
-#[derive(Default, Debug, Serialize, Eq, PartialEq)]
-pub struct FacilitapayCard {
-    number: cards::CardNumber,
-    expiry_month: Secret<String>,
-    expiry_year: Secret<String>,
-    cvc: Secret<String>,
-    complete: bool,
-}
-
-impl TryFrom<&FacilitapayRouterData<&PaymentsAuthorizeRouterData>> for FacilitapayPaymentsRequest {
-    type Error = error_stack::Report<errors::ConnectorError>;
+impl TryFrom<&FacilitapayRouterData<&types::PaymentsAuthorizeRouterData>>
+    for FacilitapayPaymentsRequest
+{
+    type Error = Error;
     fn try_from(
-        item: &FacilitapayRouterData<&PaymentsAuthorizeRouterData>,
+        item: &FacilitapayRouterData<&types::PaymentsAuthorizeRouterData>,
     ) -> Result<Self, Self::Error> {
         match item.router_data.request.payment_method_data.clone() {
-            PaymentMethodData::Card(req_card) => {
-                let card = FacilitapayCard {
-                    number: req_card.card_number,
-                    expiry_month: req_card.card_exp_month,
-                    expiry_year: req_card.card_exp_year,
-                    cvc: req_card.card_cvc,
-                    complete: item.router_data.request.is_auto_capture()?,
-                };
-                Ok(Self {
-                    amount: item.amount.clone(),
-                    card,
-                })
+            PaymentMethodData::BankTransfer(bank_transfer_data) => match *bank_transfer_data {
+                BankTransferData::Pix {
+                    source_bank_account_id,
+                    destination_bank_account_id,
+                    ..
+                } => {
+                    // Set expiry time to 15 minutes from now
+                    let dynamic_pix_expires_at = {
+                        let now = time::OffsetDateTime::now_utc();
+                        let expires_at = now + time::Duration::minutes(15);
+
+                        PrimitiveDateTime::new(expires_at.date(), expires_at.time())
+                    };
+
+                    let transaction_data =
+                        FacilitapayTransactionRequest::Pix(PixTransactionRequest {
+                            // subject id must be generated by pre-process step and link with customer id
+                            // might require discussions to be done
+                            subject_id: item.router_data.get_connector_customer_id()?.into(),
+                            from_bank_account_id: source_bank_account_id.clone().ok_or(
+                                errors::ConnectorError::MissingRequiredField {
+                                    field_name: "source bank account id",
+                                },
+                            )?,
+
+                            to_bank_account_id: destination_bank_account_id.clone().ok_or(
+                                errors::ConnectorError::MissingRequiredField {
+                                    field_name: "destination bank account id",
+                                },
+                            )?,
+                            currency: item.router_data.request.currency,
+                            exchange_currency: item.router_data.request.currency,
+                            value: item.amount.clone(),
+                            use_dynamic_pix: true,
+                            // Format: YYYY-MM-DDThh:mm:ssZ
+                            dynamic_pix_expires_at,
+                        });
+
+                    Ok(Self {
+                        transaction: transaction_data,
+                    })
+                }
+                BankTransferData::AchBankTransfer {}
+                | BankTransferData::SepaBankTransfer {}
+                | BankTransferData::BacsBankTransfer {}
+                | BankTransferData::MultibancoBankTransfer {}
+                | BankTransferData::PermataBankTransfer {}
+                | BankTransferData::BcaBankTransfer {}
+                | BankTransferData::BniVaBankTransfer {}
+                | BankTransferData::BriVaBankTransfer {}
+                | BankTransferData::CimbVaBankTransfer {}
+                | BankTransferData::DanamonVaBankTransfer {}
+                | BankTransferData::MandiriVaBankTransfer {}
+                | BankTransferData::Pse {}
+                | BankTransferData::InstantBankTransfer {}
+                | BankTransferData::LocalBankTransfer { .. } => {
+                    Err(errors::ConnectorError::NotImplemented(
+                        "Selected payment method through Facilitapay".to_string(),
+                    )
+                    .into())
+                }
+            },
+            PaymentMethodData::Card(_)
+            | PaymentMethodData::CardRedirect(_)
+            | PaymentMethodData::Wallet(_)
+            | PaymentMethodData::PayLater(_)
+            | PaymentMethodData::BankRedirect(_)
+            | PaymentMethodData::BankDebit(_)
+            | PaymentMethodData::Crypto(_)
+            | PaymentMethodData::MandatePayment
+            | PaymentMethodData::Reward
+            | PaymentMethodData::RealTimePayment(_)
+            | PaymentMethodData::MobilePayment(_)
+            | PaymentMethodData::Upi(_)
+            | PaymentMethodData::Voucher(_)
+            | PaymentMethodData::GiftCard(_)
+            | PaymentMethodData::CardToken(_)
+            | PaymentMethodData::OpenBanking(_)
+            | PaymentMethodData::NetworkToken(_)
+            | PaymentMethodData::CardDetailsForNetworkTransactionId(_) => {
+                Err(errors::ConnectorError::NotImplemented(
+                    "Selected payment method through Facilitapay".to_string(),
+                )
+                .into())
             }
-            _ => Err(errors::ConnectorError::NotImplemented("Payment method".to_string()).into()),
         }
     }
 }
 
-//TODO: Fill the struct with respective fields
+// Helper to build the request from Hyperswitch Auth Type
+impl FacilitapayAuthRequest {
+    fn from_auth_type(auth: &FacilitapayAuthType) -> Self {
+        Self {
+            user: FacilitapayCredentials {
+                username: auth.username.clone(),
+                password: auth.password.clone(),
+            },
+        }
+    }
+}
+
 // Auth Struct
+#[derive(Debug, Clone)]
 pub struct FacilitapayAuthType {
-    pub(super) api_key: Secret<String>,
+    pub(super) username: Secret<String>,
+    pub(super) password: Secret<String>,
 }
 
 impl TryFrom<&ConnectorAuthType> for FacilitapayAuthType {
-    type Error = error_stack::Report<errors::ConnectorError>;
+    type Error = Error;
     fn try_from(auth_type: &ConnectorAuthType) -> Result<Self, Self::Error> {
         match auth_type {
-            ConnectorAuthType::HeaderKey { api_key } => Ok(Self {
-                api_key: api_key.to_owned(),
+            ConnectorAuthType::BodyKey { api_key, key1 } => Ok(Self {
+                username: key1.to_owned(),
+                password: api_key.to_owned(),
             }),
             _ => Err(errors::ConnectorError::FailedToObtainAuthType.into()),
         }
     }
 }
-// PaymentsResponse
-//TODO: Append the remaining status flags
-#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
-#[serde(rename_all = "lowercase")]
-pub enum FacilitapayPaymentStatus {
-    Succeeded,
-    Failed,
-    #[default]
-    Processing,
+
+impl TryFrom<&RefreshTokenRouterData> for FacilitapayAuthRequest {
+    type Error = Error;
+    fn try_from(item: &RefreshTokenRouterData) -> Result<Self, Self::Error> {
+        let auth_type = FacilitapayAuthType::try_from(&item.connector_auth_type)?;
+        Ok(Self::from_auth_type(&auth_type))
+    }
 }
 
-impl From<FacilitapayPaymentStatus> for common_enums::AttemptStatus {
-    fn from(item: FacilitapayPaymentStatus) -> Self {
-        match item {
-            FacilitapayPaymentStatus::Succeeded => Self::Charged,
-            FacilitapayPaymentStatus::Failed => Self::Failure,
-            FacilitapayPaymentStatus::Processing => Self::Authorizing,
+fn convert_to_document_type(document_type: &str) -> Result<DocumentType, errors::ConnectorError> {
+    match document_type.to_lowercase().as_str() {
+        "cc" => Ok(DocumentType::CedulaDeCiudadania),
+        "cnpj" => Ok(DocumentType::CadastroNacionaldaPessoaJurídica),
+        "cpf" => Ok(DocumentType::CadastrodePessoasFísicas),
+        "curp" => Ok(DocumentType::ClaveÚnicadeRegistrodePoblación),
+        "nit" => Ok(DocumentType::NúmerodeIdentificaciónTributaria),
+        "passport" => Ok(DocumentType::Passport),
+        "rfc" => Ok(DocumentType::RegistroFederaldeContribuyentes),
+        "rut" => Ok(DocumentType::RolUnicoTributario),
+        "tax_id" | "taxid" => Ok(DocumentType::TaxId),
+        _ => Err(errors::ConnectorError::NotSupported {
+            message: format!("Document type '{document_type}'"),
+            connector: "Facilitapay",
+        }),
+    }
+}
+
+pub fn parse_facilitapay_error_response(
+    res: Response,
+    event_builder: Option<&mut ConnectorEvent>,
+) -> CustomResult<ErrorResponse, errors::ConnectorError> {
+    let status_code = res.status_code;
+    let response_body_bytes = res.response.clone();
+
+    let (message, raw_error) =
+        match response_body_bytes.parse_struct::<serde_json::Value>("FacilitapayErrorResponse") {
+            Ok(json_value) => {
+                event_builder.map(|i| i.set_response_body(&json_value));
+
+                let message = extract_message_from_json(&json_value);
+                (
+                    message,
+                    serde_json::to_string(&json_value).unwrap_or_default(),
+                )
+            }
+            Err(_) => match String::from_utf8(response_body_bytes.to_vec()) {
+                Ok(text) => {
+                    event_builder.map(|i| i.set_response_body(&text));
+                    (text.clone(), text)
+                }
+                Err(_) => (
+                    "Invalid response format received".to_string(),
+                    format!(
+                        "Unable to parse response as JSON or UTF-8 string. Status code: {}",
+                        status_code
+                    ),
+                ),
+            },
+        };
+
+    Ok(ErrorResponse {
+        status_code,
+        code: consts::NO_ERROR_CODE.to_string(),
+        message,
+        reason: Some(raw_error),
+        attempt_status: None,
+        connector_transaction_id: None,
+        network_advice_code: None,
+        network_decline_code: None,
+        network_error_message: None,
+    })
+}
+
+// Helper function to extract a readable message from JSON error
+fn extract_message_from_json(json: &serde_json::Value) -> String {
+    if let Some(obj) = json.as_object() {
+        if let Some(error) = obj.get("error").and_then(|e| e.as_str()) {
+            return error.to_string();
+        }
+
+        if obj.contains_key("errors") {
+            return "Validation error occurred".to_string();
         }
+
+        if !obj.is_empty() {
+            return obj
+                .iter()
+                .next()
+                .map(|(k, v)| format!("{}: {}", k, v))
+                .unwrap_or_else(|| "Unknown error".to_string());
+        }
+    } else if let Some(s) = json.as_str() {
+        return s.to_string();
     }
+
+    "Unknown error format".to_string()
 }
 
-//TODO: Fill the struct with respective fields
-#[derive(Default, Debug, Clone, Serialize, Deserialize, PartialEq)]
-pub struct FacilitapayPaymentsResponse {
-    status: FacilitapayPaymentStatus,
-    id: String,
+impl TryFrom<&types::ConnectorCustomerRouterData> for FacilitapayCustomerRequest {
+    type Error = Error;
+    fn try_from(item: &types::ConnectorCustomerRouterData) -> Result<Self, Self::Error> {
+        let email = item.request.email.clone();
+
+        let social_name = item.get_billing_full_name()?;
+
+        let (document_type, document_number) = match item.request.payment_method_data.clone() {
+            PaymentMethodData::BankTransfer(bank_transfer_data) => match *bank_transfer_data {
+                BankTransferData::Pix { cpf, .. } => {
+                    // Extract only digits from the CPF string
+                    let document_number =
+                        cpf.ok_or_else(missing_field_err("cpf"))?.map(|cpf_number| {
+                            cpf_number
+                                .chars()
+                                .filter(|chars| chars.is_ascii_digit())
+                                .collect::<String>()
+                        });
+
+                    let document_type = convert_to_document_type("cpf")?;
+                    (document_type, document_number)
+                }
+                _ => {
+                    return Err(errors::ConnectorError::NotImplemented(
+                        "Selected payment method through Facilitapay".to_string(),
+                    )
+                    .into())
+                }
+            },
+            _ => {
+                return Err(errors::ConnectorError::NotImplemented(
+                    "Selected payment method through Facilitapay".to_string(),
+                )
+                .into())
+            }
+        };
+
+        let fiscal_country = item.get_billing_country()?;
+
+        let person = FacilitapayPerson {
+            document_number,
+            document_type,
+            social_name,
+            fiscal_country,
+            email,
+            birth_date: None,
+            phone_country_code: None,
+            phone_area_code: None,
+            phone_number: None,
+            address_city: None,
+            address_state: None,
+            address_complement: None,
+            address_country: None,
+            address_number: None,
+            address_postal_code: None,
+            address_street: None,
+            net_monthly_average_income: None,
+        };
+
+        Ok(Self { person })
+    }
 }
 
-impl<F, T> TryFrom<ResponseRouterData<F, FacilitapayPaymentsResponse, T, PaymentsResponseData>>
+impl<F, T> TryFrom<ResponseRouterData<F, FacilitapayCustomerResponse, T, PaymentsResponseData>>
     for RouterData<F, T, PaymentsResponseData>
 {
-    type Error = error_stack::Report<errors::ConnectorError>;
+    type Error = Error;
     fn try_from(
-        item: ResponseRouterData<F, FacilitapayPaymentsResponse, T, PaymentsResponseData>,
+        item: ResponseRouterData<F, FacilitapayCustomerResponse, T, PaymentsResponseData>,
     ) -> Result<Self, Self::Error> {
         Ok(Self {
-            status: common_enums::AttemptStatus::from(item.response.status),
-            response: Ok(PaymentsResponseData::TransactionResponse {
-                resource_id: ResponseId::ConnectorTransactionId(item.response.id),
-                redirection_data: Box::new(None),
-                mandate_reference: Box::new(None),
-                connector_metadata: None,
-                network_txn_id: None,
-                connector_response_reference_id: None,
-                incremental_authorization_allowed: None,
-                charges: None,
+            response: Ok(PaymentsResponseData::ConnectorCustomerResponse {
+                connector_customer_id: item.response.data.customer_id.expose(),
             }),
             ..item.data
         })
     }
 }
 
-//TODO: Fill the struct with respective fields
-// REFUND :
-// Type definition for RefundRequest
-#[derive(Default, Debug, Serialize)]
-pub struct FacilitapayRefundRequest {
-    pub amount: StringMinorUnit,
+impl From<FacilitapayPaymentStatus> for common_enums::AttemptStatus {
+    fn from(item: FacilitapayPaymentStatus) -> Self {
+        match item {
+            FacilitapayPaymentStatus::Pending => Self::Pending,
+            FacilitapayPaymentStatus::Identified
+            | FacilitapayPaymentStatus::Exchanged
+            | FacilitapayPaymentStatus::Wired => Self::Charged,
+            FacilitapayPaymentStatus::Cancelled => Self::Failure,
+        }
+    }
 }
 
-impl<F> TryFrom<&FacilitapayRouterData<&RefundsRouterData<F>>> for FacilitapayRefundRequest {
-    type Error = error_stack::Report<errors::ConnectorError>;
-    fn try_from(item: &FacilitapayRouterData<&RefundsRouterData<F>>) -> Result<Self, Self::Error> {
+impl<F, T> TryFrom<ResponseRouterData<F, FacilitapayAuthResponse, T, AccessToken>>
+    for RouterData<F, T, AccessToken>
+{
+    type Error = Error;
+    fn try_from(
+        item: ResponseRouterData<F, FacilitapayAuthResponse, T, AccessToken>,
+    ) -> Result<Self, Self::Error> {
         Ok(Self {
-            amount: item.amount.to_owned(),
+            response: Ok(AccessToken {
+                token: item.response.jwt,
+                expires: 86400, // Facilitapay docs say 24 hours validity. 24 * 60 * 60 = 86400 seconds.
+            }),
+            ..item.data
         })
     }
 }
 
-// Type definition for Refund Response
+impl<F, T> TryFrom<ResponseRouterData<F, FacilitapayPaymentsResponse, T, PaymentsResponseData>>
+    for RouterData<F, T, PaymentsResponseData>
+{
+    type Error = Error;
+    fn try_from(
+        item: ResponseRouterData<F, FacilitapayPaymentsResponse, T, PaymentsResponseData>,
+    ) -> Result<Self, Self::Error> {
+        let status = if item.data.payment_method == PaymentMethod::BankTransfer
+            && item.response.data.status == FacilitapayPaymentStatus::Identified
+        {
+            common_enums::AttemptStatus::AuthenticationPending
+        } else {
+            common_enums::AttemptStatus::from(item.response.data.status.clone())
+        };
 
-#[allow(dead_code)]
-#[derive(Debug, Serialize, Default, Deserialize, Clone)]
-pub enum RefundStatus {
-    Succeeded,
-    Failed,
-    #[default]
-    Processing,
+        Ok(Self {
+            status,
+            response: if is_payment_failure(status) {
+                Err(ErrorResponse {
+                    code: item.response.data.status.clone().to_string(),
+                    message: item.response.data.status.clone().to_string(),
+                    reason: item.response.data.cancelled_reason,
+                    status_code: item.http_code,
+                    attempt_status: None,
+                    connector_transaction_id: Some(item.response.data.transaction_id),
+                    network_decline_code: None,
+                    network_advice_code: None,
+                    network_error_message: None,
+                })
+            } else {
+                Ok(PaymentsResponseData::TransactionResponse {
+                    resource_id: ResponseId::ConnectorTransactionId(
+                        item.response.data.transaction_id.clone(),
+                    ),
+                    redirection_data: Box::new(None),
+                    mandate_reference: Box::new(None),
+                    connector_metadata: get_qr_code_data(&item.response)?,
+                    network_txn_id: None,
+                    connector_response_reference_id: Some(item.response.data.transaction_id),
+                    incremental_authorization_allowed: None,
+                    charges: None,
+                })
+            },
+            ..item.data
+        })
+    }
 }
 
-impl From<RefundStatus> for enums::RefundStatus {
-    fn from(item: RefundStatus) -> Self {
-        match item {
-            RefundStatus::Succeeded => Self::Success,
-            RefundStatus::Failed => Self::Failure,
-            RefundStatus::Processing => Self::Pending,
-            //TODO: Review mapping
+fn get_qr_code_data(
+    response: &FacilitapayPaymentsResponse,
+) -> CustomResult<Option<serde_json::Value>, errors::ConnectorError> {
+    let expiration_time: i64 = if let Some(meta) = &response.data.meta {
+        if let Some(due_date_str) = meta
+            .get("dynamic_pix_due_date")
+            .and_then(|due_date_value| due_date_value.as_str())
+        {
+            let datetime = time::OffsetDateTime::parse(
+                due_date_str,
+                &time::format_description::well_known::Rfc3339,
+            )
+            .map_err(|_| errors::ConnectorError::ResponseHandlingFailed)?;
+
+            datetime.unix_timestamp() * 1000
+        } else {
+            // If dynamic_pix_due_date isn't present, use current time + 15 minutes
+            let now = time::OffsetDateTime::now_utc();
+            let expires_at = now + time::Duration::minutes(15);
+            expires_at.unix_timestamp() * 1000
         }
+    } else {
+        // If meta is null, use current time + 15 minutes
+        let now = time::OffsetDateTime::now_utc();
+        let expires_at = now + time::Duration::minutes(15);
+        expires_at.unix_timestamp() * 1000
+    };
+
+    let dynamic_pix_code = response.data.dynamic_pix_code.as_ref().ok_or_else(|| {
+        errors::ConnectorError::MissingRequiredField {
+            field_name: "dynamic_pix_code",
+        }
+    })?;
+
+    let image_data = QrImage::new_from_data(dynamic_pix_code.clone())
+        .change_context(errors::ConnectorError::ResponseHandlingFailed)?;
+
+    let image_data_url = Url::parse(image_data.data.clone().as_str())
+        .change_context(errors::ConnectorError::ResponseHandlingFailed)?;
+
+    let qr_code_info = QrCodeInformation::QrDataUrl {
+        image_data_url,
+        display_to_timestamp: Some(expiration_time),
+    };
+
+    Some(qr_code_info.encode_to_value())
+        .transpose()
+        .change_context(errors::ConnectorError::ResponseHandlingFailed)
+}
+
+impl<F> TryFrom<&FacilitapayRouterData<&types::RefundsRouterData<F>>> for FacilitapayRefundRequest {
+    type Error = Error;
+    fn try_from(
+        item: &FacilitapayRouterData<&types::RefundsRouterData<F>>,
+    ) -> Result<Self, Self::Error> {
+        Ok(Self {
+            amount: item.amount.clone(),
+        })
     }
 }
 
-//TODO: Fill the struct with respective fields
-#[derive(Default, Debug, Clone, Serialize, Deserialize)]
-pub struct RefundResponse {
-    id: String,
-    status: RefundStatus,
+impl From<FacilitapayPaymentStatus> for enums::RefundStatus {
+    fn from(item: FacilitapayPaymentStatus) -> Self {
+        match item {
+            FacilitapayPaymentStatus::Identified
+            | FacilitapayPaymentStatus::Exchanged
+            | FacilitapayPaymentStatus::Wired => Self::Success,
+            FacilitapayPaymentStatus::Cancelled => Self::Failure,
+            FacilitapayPaymentStatus::Pending => Self::Pending,
+        }
+    }
 }
 
-impl TryFrom<RefundsResponseRouterData<Execute, RefundResponse>> for RefundsRouterData<Execute> {
-    type Error = error_stack::Report<errors::ConnectorError>;
+impl TryFrom<RefundsResponseRouterData<Execute, FacilitapayRefundResponse>>
+    for types::RefundsRouterData<Execute>
+{
+    type Error = Error;
     fn try_from(
-        item: RefundsResponseRouterData<Execute, RefundResponse>,
+        item: RefundsResponseRouterData<Execute, FacilitapayRefundResponse>,
     ) -> Result<Self, Self::Error> {
         Ok(Self {
             response: Ok(RefundsResponseData {
-                connector_refund_id: item.response.id.to_string(),
-                refund_status: enums::RefundStatus::from(item.response.status),
+                connector_refund_id: item.response.data.refund_id.to_string(),
+                refund_status: enums::RefundStatus::from(item.response.data.status),
             }),
             ..item.data
         })
     }
 }
 
-impl TryFrom<RefundsResponseRouterData<RSync, RefundResponse>> for RefundsRouterData<RSync> {
-    type Error = error_stack::Report<errors::ConnectorError>;
+impl TryFrom<RefundsResponseRouterData<RSync, FacilitapayRefundResponse>>
+    for types::RefundsRouterData<RSync>
+{
+    type Error = Error;
     fn try_from(
-        item: RefundsResponseRouterData<RSync, RefundResponse>,
+        item: RefundsResponseRouterData<RSync, FacilitapayRefundResponse>,
     ) -> Result<Self, Self::Error> {
         Ok(Self {
             response: Ok(RefundsResponseData {
-                connector_refund_id: item.response.id.to_string(),
-                refund_status: enums::RefundStatus::from(item.response.status),
+                connector_refund_id: item.response.data.refund_id.to_string(),
+                refund_status: enums::RefundStatus::from(item.response.data.status),
             }),
             ..item.data
         })
     }
 }
-
-//TODO: Fill the struct with respective fields
-#[derive(Default, Debug, Serialize, Deserialize, PartialEq)]
-pub struct FacilitapayErrorResponse {
-    pub status_code: u16,
-    pub code: String,
-    pub message: String,
-    pub reason: Option<String>,
-}
diff --git a/crates/hyperswitch_connectors/src/connectors/itaubank/transformers.rs b/crates/hyperswitch_connectors/src/connectors/itaubank/transformers.rs
index 4f6cc393fc5..0ccf5518aa9 100644
--- a/crates/hyperswitch_connectors/src/connectors/itaubank/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/itaubank/transformers.rs
@@ -65,7 +65,9 @@ impl TryFrom<&ItaubankRouterData<&types::PaymentsAuthorizeRouterData>> for Itaub
         match item.router_data.request.payment_method_data.clone() {
             PaymentMethodData::BankTransfer(bank_transfer_data) => {
                 match *bank_transfer_data {
-                    BankTransferData::Pix { pix_key, cpf, cnpj } => {
+                    BankTransferData::Pix {
+                        pix_key, cpf, cnpj, ..
+                    } => {
                         let nome = item.router_data.get_optional_billing_full_name();
                         // cpf and cnpj are mutually exclusive
                         let devedor = match (cnpj, cpf) {
diff --git a/crates/hyperswitch_connectors/src/default_implementations.rs b/crates/hyperswitch_connectors/src/default_implementations.rs
index 35d95343aba..c15da205985 100644
--- a/crates/hyperswitch_connectors/src/default_implementations.rs
+++ b/crates/hyperswitch_connectors/src/default_implementations.rs
@@ -825,7 +825,6 @@ default_imp_for_create_customer!(
     connectors::Digitalvirgo,
     connectors::Dlocal,
     connectors::Elavon,
-    connectors::Facilitapay,
     connectors::Fiserv,
     connectors::Fiservemea,
     connectors::Fiuu,
diff --git a/crates/hyperswitch_connectors/src/default_implementations_v2.rs b/crates/hyperswitch_connectors/src/default_implementations_v2.rs
index 41817d955a6..97ac61d6470 100644
--- a/crates/hyperswitch_connectors/src/default_implementations_v2.rs
+++ b/crates/hyperswitch_connectors/src/default_implementations_v2.rs
@@ -2725,6 +2725,7 @@ default_imp_for_new_connector_integration_revenue_recovery!(
     connectors::Digitalvirgo,
     connectors::Dlocal,
     connectors::Elavon,
+    connectors::Facilitapay,
     connectors::Fiserv,
     connectors::Fiservemea,
     connectors::Fiuu,
diff --git a/crates/hyperswitch_connectors/src/utils.rs b/crates/hyperswitch_connectors/src/utils.rs
index 60cb878d9a3..4f0c2eb8639 100644
--- a/crates/hyperswitch_connectors/src/utils.rs
+++ b/crates/hyperswitch_connectors/src/utils.rs
@@ -13,10 +13,10 @@ use common_enums::{
     enums::{
         AlbaniaStatesAbbreviation, AndorraStatesAbbreviation, AttemptStatus,
         AustriaStatesAbbreviation, BelarusStatesAbbreviation, BelgiumStatesAbbreviation,
-        BosniaAndHerzegovinaStatesAbbreviation, BulgariaStatesAbbreviation,
-        CanadaStatesAbbreviation, CroatiaStatesAbbreviation, CzechRepublicStatesAbbreviation,
-        DenmarkStatesAbbreviation, FinlandStatesAbbreviation, FranceStatesAbbreviation,
-        FutureUsage, GermanyStatesAbbreviation, GreeceStatesAbbreviation,
+        BosniaAndHerzegovinaStatesAbbreviation, BrazilStatesAbbreviation,
+        BulgariaStatesAbbreviation, CanadaStatesAbbreviation, CroatiaStatesAbbreviation,
+        CzechRepublicStatesAbbreviation, DenmarkStatesAbbreviation, FinlandStatesAbbreviation,
+        FranceStatesAbbreviation, FutureUsage, GermanyStatesAbbreviation, GreeceStatesAbbreviation,
         HungaryStatesAbbreviation, IcelandStatesAbbreviation, IrelandStatesAbbreviation,
         ItalyStatesAbbreviation, LatviaStatesAbbreviation, LiechtensteinStatesAbbreviation,
         LithuaniaStatesAbbreviation, LuxembourgStatesAbbreviation, MaltaStatesAbbreviation,
@@ -5118,6 +5118,52 @@ impl ForeignTryFrom<String> for UkraineStatesAbbreviation {
     }
 }
 
+impl ForeignTryFrom<String> for BrazilStatesAbbreviation {
+    type Error = error_stack::Report<errors::ConnectorError>;
+
+    fn foreign_try_from(value: String) -> Result<Self, Self::Error> {
+        let state_abbreviation_check =
+            StringExt::<Self>::parse_enum(value.clone(), "BrazilStatesAbbreviation");
+
+        match state_abbreviation_check {
+            Ok(state_abbreviation) => Ok(state_abbreviation),
+            Err(_) => match value.as_str() {
+                "Acre" => Ok(Self::Acre),
+                "Alagoas" => Ok(Self::Alagoas),
+                "Amapá" => Ok(Self::Amapá),
+                "Amazonas" => Ok(Self::Amazonas),
+                "Bahia" => Ok(Self::Bahia),
+                "Ceará" => Ok(Self::Ceará),
+                "Distrito Federal" => Ok(Self::DistritoFederal),
+                "Espírito Santo" => Ok(Self::EspíritoSanto),
+                "Goiás" => Ok(Self::Goiás),
+                "Maranhão" => Ok(Self::Maranhão),
+                "Mato Grosso" => Ok(Self::MatoGrosso),
+                "Mato Grosso do Sul" => Ok(Self::MatoGrossoDoSul),
+                "Minas Gerais" => Ok(Self::MinasGerais),
+                "Pará" => Ok(Self::Pará),
+                "Paraíba" => Ok(Self::Paraíba),
+                "Paraná" => Ok(Self::Paraná),
+                "Pernambuco" => Ok(Self::Pernambuco),
+                "Piauí" => Ok(Self::Piauí),
+                "Rio de Janeiro" => Ok(Self::RioDeJaneiro),
+                "Rio Grande do Norte" => Ok(Self::RioGrandeDoNorte),
+                "Rio Grande do Sul" => Ok(Self::RioGrandeDoSul),
+                "Rondônia" => Ok(Self::Rondônia),
+                "Roraima" => Ok(Self::Roraima),
+                "Santa Catarina" => Ok(Self::SantaCatarina),
+                "São Paulo" => Ok(Self::SãoPaulo),
+                "Sergipe" => Ok(Self::Sergipe),
+                "Tocantins" => Ok(Self::Tocantins),
+                _ => Err(errors::ConnectorError::InvalidDataFormat {
+                    field_name: "address.state",
+                }
+                .into()),
+            },
+        }
+    }
+}
+
 pub trait ForeignTryFrom<F>: Sized {
     type Error;
 
diff --git a/crates/hyperswitch_domain_models/src/payment_method_data.rs b/crates/hyperswitch_domain_models/src/payment_method_data.rs
index f69b9dc6855..2d386d0f002 100644
--- a/crates/hyperswitch_domain_models/src/payment_method_data.rs
+++ b/crates/hyperswitch_domain_models/src/payment_method_data.rs
@@ -18,6 +18,7 @@ use common_utils::{
 use masking::{PeekInterface, Secret};
 use serde::{Deserialize, Serialize};
 use time::Date;
+
 // We need to derive Serialize and Deserialize because some parts of payment method data are being
 // stored in the database as serde_json::Value
 #[derive(Eq, PartialEq, Clone, Debug, Serialize, Deserialize)]
@@ -612,6 +613,10 @@ pub enum BankTransferData {
         cpf: Option<Secret<String>>,
         /// CNPJ is a Brazilian company tax identification number
         cnpj: Option<Secret<String>>,
+        /// Source bank account UUID
+        source_bank_account_id: Option<MaskedBankAccount>,
+        /// Destination bank account UUID.
+        destination_bank_account_id: Option<MaskedBankAccount>,
     },
     Pse {},
     LocalBankTransfer {
@@ -1450,9 +1455,19 @@ impl From<api_models::payments::BankTransferData> for BankTransferData {
             api_models::payments::BankTransferData::MandiriVaBankTransfer { .. } => {
                 Self::MandiriVaBankTransfer {}
             }
-            api_models::payments::BankTransferData::Pix { pix_key, cpf, cnpj } => {
-                Self::Pix { pix_key, cpf, cnpj }
-            }
+            api_models::payments::BankTransferData::Pix {
+                pix_key,
+                cpf,
+                cnpj,
+                source_bank_account_id,
+                destination_bank_account_id,
+            } => Self::Pix {
+                pix_key,
+                cpf,
+                cnpj,
+                source_bank_account_id,
+                destination_bank_account_id,
+            },
             api_models::payments::BankTransferData::Pse {} => Self::Pse {},
             api_models::payments::BankTransferData::LocalBankTransfer { bank_code } => {
                 Self::LocalBankTransfer { bank_code }
@@ -1478,11 +1493,19 @@ impl From<BankTransferData> for api_models::payments::additional_info::BankTrans
             BankTransferData::CimbVaBankTransfer {} => Self::CimbVa {},
             BankTransferData::DanamonVaBankTransfer {} => Self::DanamonVa {},
             BankTransferData::MandiriVaBankTransfer {} => Self::MandiriVa {},
-            BankTransferData::Pix { pix_key, cpf, cnpj } => Self::Pix(Box::new(
+            BankTransferData::Pix {
+                pix_key,
+                cpf,
+                cnpj,
+                source_bank_account_id,
+                destination_bank_account_id,
+            } => Self::Pix(Box::new(
                 api_models::payments::additional_info::PixBankTransferAdditionalData {
                     pix_key: pix_key.map(MaskedBankAccount::from),
                     cpf: cpf.map(MaskedBankAccount::from),
                     cnpj: cnpj.map(MaskedBankAccount::from),
+                    source_bank_account_id,
+                    destination_bank_account_id,
                 },
             )),
             BankTransferData::Pse {} => Self::Pse {},
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 2f4fb7a8013..192d45c8fce 100644
--- a/crates/payment_methods/src/configs/payment_connector_required_fields.rs
+++ b/crates/payment_methods/src/configs/payment_connector_required_fields.rs
@@ -189,6 +189,8 @@ enum RequiredField {
     PixKey,
     PixCnpj,
     PixCpf,
+    PixSourceBankAccountId,
+    PixDestinationBankAccountId,
     GiftCardNumber,
     GiftCardCvc,
     DcbMsisdn,
@@ -782,6 +784,27 @@ impl RequiredField {
                     value: None,
                 },
             ),
+            Self::PixSourceBankAccountId => (
+                "payment_method_data.bank_transfer.pix.source_bank_account_id".to_string(),
+                RequiredFieldInfo {
+                    required_field: "payment_method_data.bank_transfer.pix.source_bank_account_id"
+                        .to_string(),
+                    display_name: "source_bank_account_id".to_string(),
+                    field_type: FieldType::UserSourceBankAccountId,
+                    value: None,
+                },
+            ),
+            Self::PixDestinationBankAccountId => (
+                "payment_method_data.bank_transfer.pix.destination_bank_account_id".to_string(),
+                RequiredFieldInfo {
+                    required_field:
+                        "payment_method_data.bank_transfer.pix.destination_bank_account_id"
+                            .to_string(),
+                    display_name: "destination_bank_account_id".to_string(),
+                    field_type: FieldType::UserDestinationBankAccountId,
+                    value: None,
+                },
+            ),
             Self::GiftCardNumber => (
                 "payment_method_data.gift_card.number".to_string(),
                 RequiredFieldInfo {
@@ -3068,6 +3091,20 @@ fn get_bank_transfer_required_fields() -> HashMap<enums::PaymentMethodType, Conn
                     },
                 ),
                 (Connector::Adyen, fields(vec![], vec![], vec![])),
+                (
+                    Connector::Facilitapay,
+                    RequiredFieldFinal {
+                        mandate: HashMap::new(),
+                        non_mandate: HashMap::new(),
+                        common: HashMap::from([
+                            RequiredField::PixSourceBankAccountId.to_tuple(),
+                            RequiredField::PixDestinationBankAccountId.to_tuple(),
+                            RequiredField::BillingAddressCountries(vec!["BR"]).to_tuple(),
+                            RequiredField::BillingUserFirstName.to_tuple(),
+                            RequiredField::BillingUserLastName.to_tuple(),
+                        ]),
+                    },
+                ),
             ]),
         ),
         (
diff --git a/crates/router/src/core/admin.rs b/crates/router/src/core/admin.rs
index c2f26b1ed9a..b00ed9a4600 100644
--- a/crates/router/src/core/admin.rs
+++ b/crates/router/src/core/admin.rs
@@ -1370,10 +1370,10 @@ impl ConnectorAuthTypeAndMetadataValidation<'_> {
                 elavon::transformers::ElavonAuthType::try_from(self.auth_type)?;
                 Ok(())
             }
-            // api_enums::Connector::Facilitapay => {
-            //     facilitapay::transformers::FacilitapayAuthType::try_from(self.auth_type)?;
-            //     Ok(())
-            // }
+            api_enums::Connector::Facilitapay => {
+                facilitapay::transformers::FacilitapayAuthType::try_from(self.auth_type)?;
+                Ok(())
+            }
             api_enums::Connector::Fiserv => {
                 fiserv::transformers::FiservAuthType::try_from(self.auth_type)?;
                 fiserv::transformers::FiservSessionObject::try_from(self.connector_meta_data)?;
diff --git a/crates/router/src/core/payments.rs b/crates/router/src/core/payments.rs
index b4d3995e994..34a8fba4767 100644
--- a/crates/router/src/core/payments.rs
+++ b/crates/router/src/core/payments.rs
@@ -40,7 +40,6 @@ use error_stack::{report, ResultExt};
 use events::EventInfo;
 use futures::future::join_all;
 use helpers::{decrypt_paze_token, ApplePayData};
-use hyperswitch_domain_models::payments::{payment_intent::CustomerData, ClickToPayMetaData};
 #[cfg(feature = "v2")]
 use hyperswitch_domain_models::payments::{
     PaymentCaptureData, PaymentConfirmData, PaymentIntentData, PaymentStatusData,
@@ -54,6 +53,10 @@ pub use hyperswitch_domain_models::{
     router_data::{PaymentMethodToken, RouterData},
     router_request_types::CustomerDetails,
 };
+use hyperswitch_domain_models::{
+    payments::{payment_intent::CustomerData, ClickToPayMetaData},
+    router_data::AccessToken,
+};
 use masking::{ExposeInterface, PeekInterface, Secret};
 #[cfg(feature = "v2")]
 use operations::ValidateStatusForOperation;
@@ -3052,16 +3055,6 @@ where
     // Validating the blocklist guard and generate the fingerprint
     blocklist_guard(state, merchant_account, key_store, operation, payment_data).await?;
 
-    let updated_customer = call_create_connector_customer_if_required(
-        state,
-        customer,
-        merchant_account,
-        key_store,
-        &merchant_connector_account,
-        payment_data,
-    )
-    .await?;
-
     #[cfg(feature = "v1")]
     let merchant_recipient_data = if let Some(true) = payment_data
         .get_payment_intent()
@@ -3114,6 +3107,22 @@ where
         &call_connector_action,
     );
 
+    let updated_customer = call_create_connector_customer_if_required(
+        state,
+        customer,
+        merchant_account,
+        key_store,
+        &merchant_connector_account,
+        payment_data,
+        router_data.access_token.as_ref(),
+    )
+    .await?;
+
+    #[cfg(feature = "v1")]
+    if let Some(connector_customer_id) = payment_data.get_connector_customer_id() {
+        router_data.connector_customer = Some(connector_customer_id);
+    }
+
     router_data.payment_method_token = if let Some(decrypted_token) =
         add_decrypted_payment_method_token(tokenization_action.clone(), payment_data).await?
     {
@@ -4275,6 +4284,7 @@ pub async fn call_create_connector_customer_if_required<F, Req, D>(
     key_store: &domain::MerchantKeyStore,
     merchant_connector_account: &helpers::MerchantConnectorAccountType,
     payment_data: &mut D,
+    access_token: Option<&AccessToken>,
 ) -> RouterResult<Option<storage::CustomerUpdate>>
 where
     F: Send + Clone + Sync,
@@ -4337,7 +4347,7 @@ where
 
             if should_call_connector {
                 // Create customer at connector and update the customer table to store this data
-                let router_data = payment_data
+                let mut customer_router_data = payment_data
                     .construct_router_data(
                         state,
                         connector.connector.id(),
@@ -4350,7 +4360,9 @@ where
                     )
                     .await?;
 
-                let connector_customer_id = router_data
+                customer_router_data.access_token = access_token.cloned();
+
+                let connector_customer_id = customer_router_data
                     .create_connector_customer(state, &connector)
                     .await?;
 
@@ -8056,6 +8068,9 @@ pub trait OperationSessionGetters<F> {
     fn get_capture_method(&self) -> Option<enums::CaptureMethod>;
     fn get_merchant_connector_id_in_attempt(&self) -> Option<id_type::MerchantConnectorAccountId>;
 
+    #[cfg(feature = "v1")]
+    fn get_connector_customer_id(&self) -> Option<String>;
+
     #[cfg(feature = "v1")]
     fn get_vault_operation(&self) -> Option<&domain_payments::VaultOperation>;
 
@@ -8247,6 +8262,11 @@ impl<F: Clone> OperationSessionGetters<F> for PaymentData<F> {
         self.vault_operation.as_ref()
     }
 
+    #[cfg(feature = "v1")]
+    fn get_connector_customer_id(&self) -> Option<String> {
+        self.connector_customer_id.clone()
+    }
+
     // #[cfg(feature = "v2")]
     // fn get_capture_method(&self) -> Option<enums::CaptureMethod> {
     //     Some(self.payment_intent.capture_method)
diff --git a/crates/router/src/types/api.rs b/crates/router/src/types/api.rs
index ad50919ae06..d130e0c5097 100644
--- a/crates/router/src/types/api.rs
+++ b/crates/router/src/types/api.rs
@@ -396,9 +396,9 @@ impl ConnectorData {
                 enums::Connector::Elavon => {
                     Ok(ConnectorEnum::Old(Box::new(connector::Elavon::new())))
                 }
-                // enums::Connector::Facilitapay => {
-                //     Ok(ConnectorEnum::Old(Box::new(connector::Facilitapay)))
-                // }
+                enums::Connector::Facilitapay => {
+                    Ok(ConnectorEnum::Old(Box::new(connector::Facilitapay::new())))
+                }
                 enums::Connector::Fiserv => {
                     Ok(ConnectorEnum::Old(Box::new(connector::Fiserv::new())))
                 }
diff --git a/crates/router/src/types/transformers.rs b/crates/router/src/types/transformers.rs
index 54abe8f7ce9..f95d80bf0d0 100644
--- a/crates/router/src/types/transformers.rs
+++ b/crates/router/src/types/transformers.rs
@@ -247,7 +247,7 @@ impl ForeignTryFrom<api_enums::Connector> for common_enums::RoutableConnectors {
             api_enums::Connector::Dlocal => Self::Dlocal,
             api_enums::Connector::Ebanx => Self::Ebanx,
             api_enums::Connector::Elavon => Self::Elavon,
-            // api_enums::Connector::Facilitapay => Self::Facilitapay,
+            api_enums::Connector::Facilitapay => Self::Facilitapay,
             api_enums::Connector::Fiserv => Self::Fiserv,
             api_enums::Connector::Fiservemea => Self::Fiservemea,
             api_enums::Connector::Fiuu => Self::Fiuu,
diff --git a/crates/router/tests/connectors/sample_auth.toml b/crates/router/tests/connectors/sample_auth.toml
index 0650e5e6a4d..2675c337029 100644
--- a/crates/router/tests/connectors/sample_auth.toml
+++ b/crates/router/tests/connectors/sample_auth.toml
@@ -47,6 +47,10 @@ key1 = "key1"
 api_key = "access_key"
 key1 = "secret_key"
 
+[facilitapay]
+api_key = "password"
+key1 = "username" # email id
+
 [fiserv]
 api_key = "MyApiKey"
 key1 = "MerchantID"
diff --git a/loadtest/config/development.toml b/loadtest/config/development.toml
index fc3a777ee6e..959a7a90dba 100644
--- a/loadtest/config/development.toml
+++ b/loadtest/config/development.toml
@@ -353,6 +353,9 @@ pix = { country = "BR", currency = "BRL" }
 red_compra = { country = "CL", currency = "CLP" }
 red_pagos = { country = "UY", currency = "UYU" }
 
+[pm_filters.facilitapay]
+pix = { country = "BR", currency = "BRL" }
+
 [pm_filters.globalpay]
 credit = { 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,SZ,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,VA,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,NL,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,PM,VC,WS,SM,ST,SA,SN,RS,SC,SL,SG,SX,SK,SI,SB,SO,ZA,GS,SS,ES,LK,SD,SR,SJ,SE,CH,SY,TW,TJ,TZ,TH,TL,TG,TK,TO,TT,TN,TR,TM,TC,TV,UG,UA,AE,GB,US,UM,UY,UZ,VU,VE,VN,VG,VI,WF,EH,YE,ZM,ZW", currency = "AFN,DZD,ARS,AMD,AWG,AUD,AZN,BSD,BHD,THB,PAB,BBD,BYN,BZD,BMD,BOB,BRL,BND,BGN,BIF,CVE,CAD,CLP,COP,KMF,CDF,NIO,CRC,CUP,CZK,GMD,DKK,MKD,DJF,DOP,VND,XCD,EGP,SVC,ETB,EUR,FKP,FJD,HUF,GHS,GIP,HTG,PYG,GNF,GYD,HKD,UAH,ISK,INR,IRR,IQD,JMD,JOD,KES,PGK,HRK,KWD,AOA,MMK,LAK,GEL,LBP,ALL,HNL,SLL,LRD,LYD,SZL,LSL,MGA,MWK,MYR,MUR,MXN,MDL,MAD,MZN,NGN,ERN,NAD,NPR,ANG,ILS,TWD,NZD,BTN,KPW,NOK,TOP,PKR,MOP,UYU,PHP,GBP,BWP,QAR,GTQ,ZAR,OMR,KHR,RON,MVR,IDR,RUB,RWF,SHP,SAR,RSD,SCR,SGD,PEN,SBD,KGS,SOS,TJS,SSP,LKR,SDG,SRD,SEK,CHF,SYP,BDT,WST,TZS,KZT,TTD,MNT,TND,TRY,TMT,AED,UGX,USD,UZS,VUV,KRW,YER,JPY,CNY,ZMW,ZWL,PLN,CLF,STD,CUC" }
 debit = { 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,SZ,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,VA,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,NL,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,PM,VC,WS,SM,ST,SA,SN,RS,SC,SL,SG,SX,SK,SI,SB,SO,ZA,GS,SS,ES,LK,SD,SR,SJ,SE,CH,SY,TW,TJ,TZ,TH,TL,TG,TK,TO,TT,TN,TR,TM,TC,TV,UG,UA,AE,GB,US,UM,UY,UZ,VU,VE,VN,VG,VI,WF,EH,YE,ZM,ZW", currency = "AFN,DZD,ARS,AMD,AWG,AUD,AZN,BSD,BHD,THB,PAB,BBD,BYN,BZD,BMD,BOB,BRL,BND,BGN,BIF,CVE,CAD,CLP,COP,KMF,CDF,NIO,CRC,CUP,CZK,GMD,DKK,MKD,DJF,DOP,VND,XCD,EGP,SVC,ETB,EUR,FKP,FJD,HUF,GHS,GIP,HTG,PYG,GNF,GYD,HKD,UAH,ISK,INR,IRR,IQD,JMD,JOD,KES,PGK,HRK,KWD,AOA,MMK,LAK,GEL,LBP,ALL,HNL,SLL,LRD,LYD,SZL,LSL,MGA,MWK,MYR,MUR,MXN,MDL,MAD,MZN,NGN,ERN,NAD,NPR,ANG,ILS,TWD,NZD,BTN,KPW,NOK,TOP,PKR,MOP,UYU,PHP,GBP,BWP,QAR,GTQ,ZAR,OMR,KHR,RON,MVR,IDR,RUB,RWF,SHP,SAR,RSD,SCR,SGD,PEN,SBD,KGS,SOS,TJS,SSP,LKR,SDG,SRD,SEK,CHF,SYP,BDT,WST,TZS,KZT,TTD,MNT,TND,TRY,TMT,AED,UGX,USD,UZS,VUV,KRW,YER,JPY,CNY,ZMW,ZWL,PLN,CLF,STD,CUC" }
@@ -404,7 +407,7 @@ gocardless = { long_lived_token = true, payment_method = "bank_debit" }
 billwerk = { long_lived_token = false, payment_method = "card" }
 
 [connector_customer]
-connector_list = "gocardless,stax,stripe"
+connector_list = "gocardless,stax,stripe,facilitapay"
 payout_connector_list = "nomupay,wise"
 
 [dummy_connector]
@@ -529,4 +532,4 @@ paybox = { payment_method = "card" }
 redsys = { payment_method = "card" }
 
 [billing_connectors_payment_sync]
-billing_connectors_which_require_payment_sync = "stripebilling, recurly"
\ No newline at end of file
+billing_connectors_which_require_payment_sync = "stripebilling, recurly"

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

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

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

This PR does the following:

- Adds Facilitapay Connector configs
- Enables Facilitapay Connector in Core
  - Feature Matrix
  - Pix Bank Transfer (QRCode flow)
  - Does not support `Manual` capture
  - AccessToken flow
  - Requires Connector Customer to be created prior to make a payment
- Adds Cypress test coverage for Facilitapay Pix Bank transfer

Also, this PR involves a small core change which is explained [here](https://github.com/juspay/hyperswitch/pull/7704#discussion_r2037127714). Quoted below:

> Previously, `updated_customer` was called before constructing the `router_data`. `updated_customer` returns us the `connector_customer` in `payment_data` that then gets updated in the `router_data` while it gets constructed.
> 
> Facilitapay requires us to pass `access_token` to create the `connectorCustomer` but `access_token` is available only in the `router_data`. This creates a cyclical dependency between `updated_customer` and `router_data`.
> 
> To comes overcome this, we need to move `updated_customer` after `router_data`.
> 
> `updated_customer` returns us the `connector_customer` value and it never gets updated in the `router_data` since it is called before calling `updated_customer` which results in `connector_customer_id` to go missing resulting in all payments that rely on `connector_customer_id` to fail.
> 
> Hence, we need to update the `router_data` with `connector_customer` value that we get from `payment_data` returned by the `updated_customer` and the above lines does the same.

### Additional Changes

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

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

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


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

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

New connector integration. Closes #7732

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

<details>
<summary>Authorize call</summary>

```curl
curl --location 'http://localhost:8080/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Accept-Language: ja' \
--header 'api-key: dev_ptC2LQhN7u066v4fCKUcOEAWodGDoMl3We9YxN0cM4d7dal16ZSmt9EOdSJ0C6I4' \
--data-raw '{
    "amount": 10400,
    "currency": "BRL",
    "confirm": false,
    "capture_method": "automatic",
    "capture_on": "2022-09-10T10:11:12Z",
    "amount_to_capture": 10400,
    "email": "guesjhvghht@example.com",
    "phone": "999999999",
    "phone_country_code": "+1",
    "description": "Its my first payment request",
    "authentication_type": "no_three_ds",
    "return_url": "https://duck.com",
    "billing": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "BR",
            "first_name": "PiX"
        }
    },
    "shipping": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "BR",
            "first_name": "PiX"
        }
    },
    "browser_info": {
		"ip_address": "192.168.0.1",
		"user_agent": "MY LAPTOP RUNS ON m0z://a"
	},
    "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_HqjCP9OWtYlxg0KYwPMU",
    "merchant_id": "postman_merchant_GHAction_1744364064",
    "status": "requires_payment_method",
    "amount": 10400,
    "net_amount": 10400,
    "shipping_cost": null,
    "amount_capturable": 0,
    "amount_received": null,
    "connector": null,
    "client_secret": "pay_HqjCP9OWtYlxg0KYwPMU_secret_VZlpnxNdhvw9MExKApxo",
    "created": "2025-04-11T11:27:27.560Z",
    "currency": "BRL",
    "customer_id": null,
    "customer": {
        "id": null,
        "name": null,
        "email": "guesjhvghht@example.com",
        "phone": "999999999",
        "phone_country_code": "+1"
    },
    "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": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "billing": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "order_details": null,
    "email": null,
    "name": null,
    "phone": null,
    "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": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": null,
    "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_d88fTeKAHe2MonTWe8Dk",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": null,
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2025-04-11T11:42:27.560Z",
    "fingerprint": null,
    "browser_info": {
        "ip_address": "192.168.0.1",
        "user_agent": "MY LAPTOP RUNS ON m0z://a"
    },
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2025-04-11T11:27:27.583Z",
    "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
}
```

</details>


<details>
<summary>Confirm call</summary>


```curl
curl --location 'http://localhost:8080/payments/pay_HqjCP9OWtYlxg0KYwPMU/confirm' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: pk_dev_e765522f7c7543b9844fbcb1ab283a71' \
--data '{
    "payment_method": "bank_transfer",
    "payment_method_type": "pix",
    "payment_method_data": {
        "bank_transfer": {
            "pix": {
                "cpf": "866.656.235-80",
                "source_bank_account_id": "739d6b0a-e92a-40fd-9f58-6d4cdeb699bb",
                "destination_bank_account_id": "91f5cac1-9058-44b7-80e1-80c6f4a6f0bc",
                "pix_qr_expiry": "2025-04-11T19:53:54.807Z"
            }
        }
    },
    "client_secret": "pay_HqjCP9OWtYlxg0KYwPMU_secret_VZlpnxNdhvw9MExKApxo"
}'
```
```json
{
    "payment_id": "pay_HqjCP9OWtYlxg0KYwPMU",
    "merchant_id": "postman_merchant_GHAction_1744364064",
    "status": "requires_customer_action",
    "amount": 10400,
    "net_amount": 10400,
    "shipping_cost": null,
    "amount_capturable": 10400,
    "amount_received": null,
    "connector": "facilitapay",
    "client_secret": "pay_HqjCP9OWtYlxg0KYwPMU_secret_VZlpnxNdhvw9MExKApxo",
    "created": "2025-04-11T11:27:27.560Z",
    "currency": "BRL",
    "customer_id": null,
    "customer": {
        "id": null,
        "name": null,
        "email": "guesjhvghht@example.com",
        "phone": "999999999",
        "phone_country_code": "+1"
    },
    "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": "bank_transfer",
    "payment_method_data": {
        "bank_transfer": {
            "pix": {
                "pix_key": null,
                "cpf": "866.***.**5-80",
                "cnpj": null,
                "source_bank_account_id": "739d****-****-****-****-********99bb",
                "destination_bank_account_id": "91f5****-****-****-****-********f0bc"
            }
        },
        "billing": null
    },
    "payment_token": null,
    "shipping": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "billing": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "order_details": null,
    "email": null,
    "name": null,
    "phone": null,
    "return_url": "https://duck.com/",
    "authentication_type": "no_three_ds",
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "next_action": {
        "type": "qr_code_information",
        "image_data_url": "data:image/png;base64,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",
        "display_to_timestamp": 1744371750000,
        "qr_code_url": null,
        "display_text": null,
        "border_color": null
    },
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": "pix",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": null,
    "manual_retry_allowed": null,
    "connector_transaction_id": "aa3223d2-bd54-44d0-8816-fdbeae885c14",
    "frm_message": null,
    "metadata": {
        "udf1": "value1",
        "login_date": "2019-09-10T10:11:12Z",
        "new_customer": "true"
    },
    "connector_metadata": null,
    "feature_metadata": null,
    "reference_id": "aa3223d2-bd54-44d0-8816-fdbeae885c14",
    "payment_link": null,
    "profile_id": "pro_d88fTeKAHe2MonTWe8Dk",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_uEuYQIIpwmhh2zZgfnCK",
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2025-04-11T11:42:27.560Z",
    "fingerprint": null,
    "browser_info": {
        "os_type": null,
        "language": null,
        "time_zone": null,
        "ip_address": "::1",
        "os_version": null,
        "user_agent": null,
        "color_depth": null,
        "device_model": null,
        "java_enabled": null,
        "screen_width": null,
        "accept_header": null,
        "screen_height": null,
        "accept_language": "en",
        "java_script_enabled": null
    },
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2025-04-11T11:27:32.090Z",
    "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
}
```

</details>


<details>
<summary>QR Code</summary>

<img width="691" alt="image" src="https://github.com/user-attachments/assets/5e088c40-aaea-4056-baf5-e81b1a88603d" />

<img width="704" alt="image" src="https://github.com/user-attachments/assets/b87e6a91-a4d7-4dfa-a846-1cf785e8b298" />

</details>

<details>
<summary>Retrieve Call</summary>

```curl
curl --location 'http://localhost:8080/payments/pay_HqjCP9OWtYlxg0KYwPMU?force_sync=true' \
--header 'Accept: application/json' \
--header 'api-key: dev_ptC2LQhN7u066v4fCKUcOEAWodGDoMl3We9YxN0cM4d7dal16ZSmt9EOdSJ0C6I4'
```
```json
{
    "payment_id": "pay_HqjCP9OWtYlxg0KYwPMU",
    "merchant_id": "postman_merchant_GHAction_1744364064",
    "status": "requires_customer_action",
    "amount": 10400,
    "net_amount": 10400,
    "shipping_cost": null,
    "amount_capturable": 10400,
    "amount_received": null,
    "connector": "facilitapay",
    "client_secret": "pay_HqjCP9OWtYlxg0KYwPMU_secret_VZlpnxNdhvw9MExKApxo",
    "created": "2025-04-11T11:27:27.560Z",
    "currency": "BRL",
    "customer_id": null,
    "customer": {
        "id": null,
        "name": null,
        "email": "guesjhvghht@example.com",
        "phone": "999999999",
        "phone_country_code": "+1"
    },
    "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": "bank_transfer",
    "payment_method_data": {
        "bank_transfer": {
            "pix": {
                "pix_key": null,
                "cpf": "866.***.**5-80",
                "cnpj": null,
                "source_bank_account_id": "739d****-****-****-****-********99bb",
                "destination_bank_account_id": "91f5****-****-****-****-********f0bc"
            }
        },
        "billing": null
    },
    "payment_token": null,
    "shipping": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "billing": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "order_details": null,
    "email": null,
    "name": null,
    "phone": null,
    "return_url": "https://duck.com/",
    "authentication_type": "no_three_ds",
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "next_action": {
        "type": "qr_code_information",
        "image_data_url": "data:image/png;base64,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",
        "display_to_timestamp": 1744371750000,
        "qr_code_url": null,
        "display_text": null,
        "border_color": null
    },
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": "pix",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": null,
    "manual_retry_allowed": null,
    "connector_transaction_id": "aa3223d2-bd54-44d0-8816-fdbeae885c14",
    "frm_message": null,
    "metadata": {
        "udf1": "value1",
        "login_date": "2019-09-10T10:11:12Z",
        "new_customer": "true"
    },
    "connector_metadata": null,
    "feature_metadata": null,
    "reference_id": "aa3223d2-bd54-44d0-8816-fdbeae885c14",
    "payment_link": null,
    "profile_id": "pro_d88fTeKAHe2MonTWe8Dk",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_uEuYQIIpwmhh2zZgfnCK",
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2025-04-11T11:42:27.560Z",
    "fingerprint": null,
    "browser_info": {
        "os_type": null,
        "language": null,
        "time_zone": null,
        "ip_address": "::1",
        "os_version": null,
        "user_agent": null,
        "color_depth": null,
        "device_model": null,
        "java_enabled": null,
        "screen_width": null,
        "accept_header": null,
        "screen_height": null,
        "accept_language": "en",
        "java_script_enabled": null
    },
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2025-04-11T12:02:17.950Z",
    "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
}
```

</details>

<details>
<summary>Refund call</summary>

```curl
curl --location 'http://localhost:8080/refunds' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_ptC2LQhN7u066v4fCKUcOEAWodGDoMl3We9YxN0cM4d7dal16ZSmt9EOdSJ0C6I4' \
--data '{
    "payment_id": "pay_HqjCP9OWtYlxg0KYwPMU",
    "amount": 600,
    "reason": "Customer returned product",
    "refund_type": "instant",
    "metadata": {
        "udf1": "value1",
        "new_customer": "true",
        "login_date": "2019-09-10T10:11:12Z"
    }
}'
```
```json
{
    "error": {
        "type": "invalid_request",
        "message": "This Payment could not be refund because it has a status of requires_customer_action. The expected state is succeeded, partially_captured",
        "code": "IR_14"
    }
}
```
</details>

<details>
<summary>Void call</summary>

Authorize

```curl
curl --location 'http://localhost:8080/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Accept-Language: ja' \
--header 'api-key: dev_ptC2LQhN7u066v4fCKUcOEAWodGDoMl3We9YxN0cM4d7dal16ZSmt9EOdSJ0C6I4' \
--data-raw '{
    "amount": 10400,
    "currency": "BRL",
    "confirm": false,
    "capture_method": "automatic",
    "capture_on": "2022-09-10T10:11:12Z",
    "amount_to_capture": 10400,
    "email": "guesjhvghht@example.com",
    "phone": "999999999",
    "phone_country_code": "+1",
    "description": "Its my first payment request",
    "authentication_type": "no_three_ds",
    "return_url": "https://duck.com",
    "billing": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "BR",
            "first_name": "PiX"
        }
    },
    "shipping": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "BR",
            "first_name": "PiX"
        }
    },
    "browser_info": {
		"ip_address": "192.168.0.1",
		"user_agent": "MY LAPTOP RUNS ON m0z://a"
	},
    "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_oEMHiZFEcOnYfhKdCGkX",
    "merchant_id": "postman_merchant_GHAction_1744364064",
    "status": "requires_payment_method",
    "amount": 10400,
    "net_amount": 10400,
    "shipping_cost": null,
    "amount_capturable": 0,
    "amount_received": null,
    "connector": null,
    "client_secret": "pay_oEMHiZFEcOnYfhKdCGkX_secret_4pCGB9AmNlBGvZUcT8La",
    "created": "2025-04-11T17:53:10.739Z",
    "currency": "BRL",
    "customer_id": null,
    "customer": {
        "id": null,
        "name": null,
        "email": "guesjhvghht@example.com",
        "phone": "999999999",
        "phone_country_code": "+1"
    },
    "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": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "billing": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "order_details": null,
    "email": null,
    "name": null,
    "phone": null,
    "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": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": null,
    "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_d88fTeKAHe2MonTWe8Dk",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": null,
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2025-04-11T18:08:10.739Z",
    "fingerprint": null,
    "browser_info": {
        "ip_address": "192.168.0.1",
        "user_agent": "MY LAPTOP RUNS ON m0z://a"
    },
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2025-04-11T17:53:10.747Z",
    "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
}
```

Confirm

```curl
curl --location 'http://localhost:8080/payments/pay_oEMHiZFEcOnYfhKdCGkX/confirm' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: pk_dev_e765522f7c7543b9844fbcb1ab283a71' \
--data '{
    "payment_method": "bank_transfer",
    "payment_method_type": "pix",
    "payment_method_data": {
        "bank_transfer": {
            "pix": {
                "cpf": "866.656.235-80",
                "source_bank_account_id": "739d6b0a-e92a-40fd-9f58-6d4cdeb699bb",
                "destination_bank_account_id": "91f5cac1-9058-44b7-80e1-80c6f4a6f0bc",
                "pix_qr_expiry": "2025-04-11T19:53:54.807Z"
            }
        }
    },
    "client_secret": "pay_oEMHiZFEcOnYfhKdCGkX_secret_4pCGB9AmNlBGvZUcT8La"
}'
```
```json
{
    "payment_id": "pay_oEMHiZFEcOnYfhKdCGkX",
    "merchant_id": "postman_merchant_GHAction_1744364064",
    "status": "requires_customer_action",
    "amount": 10400,
    "net_amount": 10400,
    "shipping_cost": null,
    "amount_capturable": 10400,
    "amount_received": null,
    "connector": "facilitapay",
    "client_secret": "pay_oEMHiZFEcOnYfhKdCGkX_secret_4pCGB9AmNlBGvZUcT8La",
    "created": "2025-04-11T17:53:10.739Z",
    "currency": "BRL",
    "customer_id": null,
    "customer": {
        "id": null,
        "name": null,
        "email": "guesjhvghht@example.com",
        "phone": "999999999",
        "phone_country_code": "+1"
    },
    "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": "bank_transfer",
    "payment_method_data": {
        "bank_transfer": {
            "pix": {
                "pix_key": null,
                "cpf": "866.***.**5-80",
                "cnpj": null,
                "source_bank_account_id": "739d****-****-****-****-********99bb",
                "destination_bank_account_id": "91f5****-****-****-****-********f0bc"
            }
        },
        "billing": null
    },
    "payment_token": null,
    "shipping": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "billing": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "order_details": null,
    "email": null,
    "name": null,
    "phone": null,
    "return_url": "https://duck.com/",
    "authentication_type": "no_three_ds",
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "next_action": {
        "type": "qr_code_information",
        "image_data_url": "data:image/png;base64,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",
        "display_to_timestamp": 1744394897000,
        "qr_code_url": null,
        "display_text": null,
        "border_color": null
    },
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": "pix",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": null,
    "manual_retry_allowed": null,
    "connector_transaction_id": "33fe7dc7-25a0-4ba5-a7d2-4245fc0b2127",
    "frm_message": null,
    "metadata": {
        "udf1": "value1",
        "login_date": "2019-09-10T10:11:12Z",
        "new_customer": "true"
    },
    "connector_metadata": null,
    "feature_metadata": null,
    "reference_id": "33fe7dc7-25a0-4ba5-a7d2-4245fc0b2127",
    "payment_link": null,
    "profile_id": "pro_d88fTeKAHe2MonTWe8Dk",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_uEuYQIIpwmhh2zZgfnCK",
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2025-04-11T18:08:10.739Z",
    "fingerprint": null,
    "browser_info": {
        "os_type": null,
        "language": null,
        "time_zone": null,
        "ip_address": "::1",
        "os_version": null,
        "user_agent": null,
        "color_depth": null,
        "device_model": null,
        "java_enabled": null,
        "screen_width": null,
        "accept_header": null,
        "screen_height": null,
        "accept_language": "en",
        "java_script_enabled": null
    },
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2025-04-11T17:53:19.350Z",
    "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
}
```

Void

```curl
curl --location 'http://localhost:8080/payments/pay_oEMHiZFEcOnYfhKdCGkX/cancel' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_ptC2LQhN7u066v4fCKUcOEAWodGDoMl3We9YxN0cM4d7dal16ZSmt9EOdSJ0C6I4' \
--data '{"cancellation_reason":"requested_by_customer"}'
```
```json
{
    "payment_id": "pay_oEMHiZFEcOnYfhKdCGkX",
    "merchant_id": "postman_merchant_GHAction_1744364064",
    "status": "cancelled",
    "amount": 10400,
    "net_amount": 10400,
    "shipping_cost": null,
    "amount_capturable": 10400,
    "amount_received": null,
    "connector": "facilitapay",
    "client_secret": "pay_oEMHiZFEcOnYfhKdCGkX_secret_4pCGB9AmNlBGvZUcT8La",
    "created": "2025-04-11T17:53:10.739Z",
    "currency": "BRL",
    "customer_id": null,
    "customer": {
        "id": null,
        "name": null,
        "email": "guesjhvghht@example.com",
        "phone": "999999999",
        "phone_country_code": "+1"
    },
    "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": "bank_transfer",
    "payment_method_data": {
        "bank_transfer": {
            "pix": {
                "pix_key": null,
                "cpf": "866.***.**5-80",
                "cnpj": null,
                "source_bank_account_id": "739d****-****-****-****-********99bb",
                "destination_bank_account_id": "91f5****-****-****-****-********f0bc"
            }
        },
        "billing": null
    },
    "payment_token": null,
    "shipping": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "billing": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "order_details": null,
    "email": null,
    "name": null,
    "phone": null,
    "return_url": "https://duck.com/",
    "authentication_type": "no_three_ds",
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "next_action": {
        "type": "qr_code_information",
        "image_data_url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAegAAAHoCAAAAACnOyPQAAAUO0lEQVR4Ae3gAZAkSZIkSRKLqpm7R0REZmZmVlVVVVV3d3d3d/fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMdHd3d3dXV1VVVVVmZkZGRIS7m5kKz0xmV3d1d3dPz8zMzMxMYjVX/T9A5ar/D6hc9f8Blav+P6By1f8HVK76/4DKVf8fULnq/wMqV/1/QOWq/w+oXPX/AZWr/j+gctX/B1Su+v+AylX/H1C56v8DKlf9f0Dlqv8PqFz1/wGVq/4/oHLV/wdUrvr/gMpV/x9Quer/AypX/X9A5ar/D6hc9f8Blav+P6By1f8HVK76/4DKVf8fULnq/wMq/wLxb2OeP/GczHMSV5gXjbjCPH/iCvOcxBXmOYkrzHMSL5x5TuI5mSvEFeb5E/825oWictX/B1Su+v+AylX/H1C56v8DKlf9f0Dlqv8PqFz1/wGVF5F50YjnTzx/4vkTz5950YjnJK4wV5grxAsnrjBXiCvMFeL5M89JPCdxhXn+zItGvEioXPX/AZWr/j+gctX/B1Su+v+AylX/H1C56v8DKlf9f0DlX0k8f+b5E8+fuUK8aMwV4gpzhblCPCdzhbjCPCdxhXnhzBXiP4a5QrxoxPNn/lWoXPX/AZWr/j+gctX/B1Su+v+AylX/H1C56v8DKlf9f0Dlv4i5QlwhrjBXiCvMFeIKc4W4wlwhrjAvGnGFeU7iCvOiMVeIK8wV4jmZ52SuEFeYK8QV5j8Vlav+P6By1f8HVK76/4DKVf8fULnq/wMqV/1/QOWq/w+o/BcRLxpxhblCPCfx/JkrxAsnXjhxhXn+xHMSV5grxBXiCvPCmf8SVK76/4DKVf8fULnq/wMqV/1/QOWq/w+oXPX/AZWr/j+g8q9k/m3MFeIKc4W4wjx/5l/HXCGek3n+xBXiOYnnZJ6TuMJcIf5zmP8QVK76/4DKVf8fULnq/wMqV/1/QOWq/w+oXPX/AZWr/j+g8iIS/zXEFeYKcYW5QlxhrhBXmCvEFeYK8ZzEFeY5mSvEFeYK8ZzEFeYKcYW5QlxhrhBXmOdPXGGek/gPReWq/w+oXPX/AZWr/j+gctX/B1Su+v+AylX/H1C56v8DZP5ziRfOPH/iCnOFeOHM8yeuMM+feP7MFeJfx7xw4vkz/6moXPX/AZWr/j+gctX/B1Su+v+AylX/H1C56v8DKlf9f4DMCyeuMFeIF4150YjnZJ4/8aIxV4h/HfPCiSvMCyeek3n+xBXmOYkXjflXoXLV/wdUrvr/gMpV/x9Quer/AypX/X9A5ar/D6hc9f8BlX8nc4W4wlwhrjBXiCvMFeIK88KJK8wLJ64QV5grxHMyz5+4wrxw4vkzz8k8f+IK85zEFeYK8ZzMcxJXmBcJlav+P6By1f8HVK76/4DKVf8fULnq/wMqV/1/QOWq/w+QedGIK8wV4jmZK8QV5vkT/z3MFeJFY64Qz5+5Qjwn88KJ5888J/GczHMSV5gXCZWr/j+gctX/B1Su+v+AylX/H1C56v8DKlf9f0Dlqv8PqPwLxBXmOZkrxBXiCnOFuMJcIa4wV4gXzlwhrjDPSTwn8/yJF85cIa4wz8k8f+IKc4W4QlxhrhBXmOdknpO4wlxhrhDPSfybULnq/wMqV/1/QOWq/w+oXPX/AZWr/j+gctX/B1Su+v+Ayr/AXCGek3lO5gpxhblCPH/mCvGczBXiOYnnz1whrjDPn3jhzBXiRWOek3lO4oUTV5grzBXiCvOcxL8Llav+P6By1f8HVK76/4DKVf8fULnq/wMqV/1/QOWq/w+Q+bcRz8k8J/GvY56TeP7MFeKFM89JXGGuEM/JXCGuMFeI52Sek7jCXCGuMFeIK8zzJ54/c4W4wjwn8ZzMC0Xlqv8PqFz1/wGVq/4/oHLV/wdUrvr/gMpV/x9Quer/Ayr/AnGFuUK8cOI5meckrjBXiCvEFeY5mefPXCGek3nhxHMyL5y5Qjwn8ZzE82euEFeY589cIa4Qz0lcYZ6TeZFQuer/AypX/X9A5ar/D6hc9f8Blav+P6By1f8HVK76/4DKv5G5Qjwnc4V4TuKFMy+ceOHM8yeuMFeI5ySuMFeY5yReNOb5E1eY5ySuMFeIF848J3OFuMK8UFSu+v+AylX/H1C56v8DKlf9f0Dlqv8PqFz1/wGVq/4/oPJvJJ4/cYV5TuYK8fyJK8y/jrlCvHDiCvPCiSvM8yeuMM+feE7mhRMvGvGczBXmRULlqv8PqFz1/wGVq/4/oHLV/wdUrvr/gMpV/x9Quer/Ayr/AvOczBXiCvOczHMSV5grzBXiOZnnZJ4/c4V44cwV4jmJ58+8aMwV4oUzV4grzBXiCnOFeP7McxJXmCvEFeZFQuWq/w+oXPX/AZWr/j+gctX/B1Su+v+AylX/H1C56v8DZF404grznMQV5grx/JkrxBXmCnGFuUJcYa4QV5jnT1xhrhDPn3lO4grznMQV5jmJ52Sek7jC/NuI52ReOHGFeZFQuer/AypX/X9A5ar/D6hc9f8Blav+P6By1f8HVK76/wCZF424wlwhrjDPn7jCXCFeOPP8iRfOXCGek7lCXGGuEM+feU7iCnOFuMJcIa4wz0lcYZ4/8ZzMcxLPyfyHoHLV/wdUrvr/gMpV/x9Quer/AypX/X9A5ar/D6hc9f8BMi+cuMJcIa4wV4grzBXihTNXiOdknpN4TuY5iedkrhBXmCvEi8ZcIa4wV4grzPMnrjDPSTwn85zEczJXiCvMcxLPyVwhrjAvFJWr/j+gctX/B1Su+v+AylX/H1C56v8DKlf9f0Dlqv8PqLyIxPNnnpN5TuIK85zM8yeuMFeIK8QV5vkTV5grxBXm+RNXmOdkrhDPSVxhrhAvnHn+xHMyL5y4wlwh/k2oXPX/AZWr/j+gctX/B1Su+v+AylX/H1C56v8DKlf9f4DMi0Y8f+Y5iedkrhDPn3nhxHMy/zriCnOFuMJcIV4488KJ589cIZ4/85zEczLPn3hO5kVC5ar/D6hc9f8Blav+P6By1f8HVK76/4DKVf8fULnq/wMq/wLxohFXmOfPXCGuMM9JPH/mOYkrzHMSV5grxBXm+RPPyTwncYW4wjx/5gpxhblCXGGuEFeYF424wlwhrjBXiH8VKlf9f0Dlqv8PqFz1/wGVq/4/oHLV/wdUrvr/gMpV/x9QeRGZK8RzEs9JvGjE82eek3hO5grxwpkrxL+OuMJcIZ6TuMJcIZ6TeOHEFeYK8cKJK8wV4grzr0Llqv8PqFz1/wGVq/4/oHLV/wdUrvr/gMpV/x9Quer/AyovInGFeU7iCvP8iSvMFeIKc4V4TuIKc4V5TuIK88KJ52SeP/HCmSvEC2euEFeY589cIZ6Tef7EczLPSVxhXigqV/1/QOWq/w+oXPX/AZWr/j+gctX/B1Su+v+AylX/H1B5EZkrxBXm+RNXmOcknpN40YjnZJ6TuMK8aMQV5jmJK8wV4gpzhblCPH/iOYkrzBXmOZkrxHMSV5jnJJ4/8yKhctX/B1Su+v+AylX/H1C56v8DKlf9f0Dlqv8PqFz1/wGVF5F4TuL5My+cuUL865jnzzwn8cKZ589cIa4wz0k8f+YKcYW5Qlwh/nXM82f+Xahc9f8Blav+P6By1f8HVK76/4DKVf8fULnq/wMqV/1/gMwLJ64wz0n825jnJJ6TedGI589cIf51zHMSz8k8f+Jfxzwn8aIxV4jnZF4kVK76/4DKVf8fULnq/wMqV/1/QOWq/w+oXPX/AZWr/j+g8m9knpO4wlwhnpN5TuIKc4V4TuIK85zEczIvnHlO4gpzhbhCXGGek7lCPCdzhXlO4jmZ5yReNOY5iSvMFeJfhcpV/x9Quer/AypX/X9A5ar/D6hc9f8Blav+P6By1f8HyLxw4jmZ5yReNOYK8ZzMFeIK85zE82euEFeYK8R/DPP8iReNeU7iCnOFeP7MFeIKc4V4/syLhMpV/x9Quer/AypX/X9A5ar/D6hc9f8Blav+P6By1f8HyLxoxHMyz0lcYZ6TeE7mCnGFeU7iOZnnJK4wV4grzHMSz8lcIa4wV4jnZF404grznMQV5grx/JnnJK4wV4jnZP5dqFz1/wGVq/4/oHLV/wdUrvr/gMpV/x9Quer/AypX/X+AzAsnnpN5TuKFM8+feE7mOYkXzjwncYV5/sQLZ56TeE7mCnGFuUJcYa4Qz595TuL5M1eIK8wV4jmZfxUqV/1/QOWq/w+oXPX/AZWr/j+gctX/B1Su+v+AylX/H1D5VxJXmCvMFeIKc4W4QlxhnpN50ZjnJJ6TeP7EczLPSVxhrhBXmCvMcxIvGvPCiedkrhDPyVwhnj9xhXmRULnq/wMqV/1/QOWq/w+oXPX/AZWr/j+gctX/B1Su+v+Ayr/APCdxhbjCPCdxhXn+xBXmOYnnZJ6TuMJcIa4wL5x5TuIKc4W4wlwhnpN5TuYKcYW5Qjx/5grxnMwV4gpzhbjCXGGeP/GvQuWq/w+oXPX/AZWr/j+gctX/B1Su+v+AylX/H1C56v8DZF44cYV5/sRzMs9J/McwV4grzHMSz595/sQV5vkTz5+5Qlxh/m3EFebfRjwn80JRuer/AypX/X9A5ar/D6hc9f8Blav+P6By1f8HVK76/4DKv8BcIa4wz8k8J/GczPMnnpN54cTzJ64wV4grzAtnnj9xhblCXGGek7lCXGGek7jCXCGuMM+fuMI8f+I5mX8VKlf9f0Dlqv8PqFz1/wGVq/4/oHLV/wdUrvr/gMpV/x9Q+ReIF424wjwn8ZzMFeY5iSvMFeJfR1xhrhD/OuYK85zMcxIvGvOczItGPCdzhXlO4jmZF4rKVf8fULnq/wMqV/1/QOWq/w+oXPX/AZWr/j+gctX/B8i8aMRzMleI589cIa4wV4h/G/PCiSvMcxLPn7lCXGGuEC+cef7EFeYK8fyZK8S/jrlCPCfzIqFy1f8HVK76/4DKVf8fULnq/wMqV/1/QOWq/w+oXPX/ATL/OuL5M89JXGGuEM/JXCFeOPNvI64wz5+4wjx/4grz/IkrzPMnrjDPSTwn85zEczLPn7jCvEioXPX/AZWr/j+gctX/B1Su+v+AylX/H1C56v8DKlf9f0DlRSSek7lCPCfxwpl/G/H8mSvEFeYK88KZF848f+IKc4W4wlwhrjAvnLlCXGGuMP864grzQlG56v8DKlf9f0Dlqv8PqFz1/wGVq/4/oHLV/wdUrvr/gMq/QLxw5jmZ589cIa4wz8lcIZ6TuMJcIZ4/85zEczJXiCvMFeIK85zEFeYKcYW5QlxhnpO5Qlxhnj/x/IkrzBXi+TNXiBcJlav+P6By1f8HVK76/4DKVf8fULnq/wMqV/1/QOWq/w+QeeHEczJXiH8bc4W4wrxoxBXmOYkrzHMSz595TuI5meckrjBXiOfPvHDiCvOcxPNnrhBXmOckrjAvEipX/X9A5ar/D6hc9f8Blav+P6By1f8HVK76/4DKVf8fIPOiEc/JvHDi+TPPSVxhrhAvnLlCvHDm+RPPn7lC/OuY5ySuMFeIK8wV4grznMRzMleIK8zzJ64wLxSVq/4/oHLV/wdUrvr/gMpV/x9Quer/AypX/X9A5ar/D5D5txFXmOckXjTmCvH8mSvEv455TuJfx7xw4jmZK8QLZ54/8aIxV4jnz7xQVK76/4DKVf8fULnq/wMqV/1/QOWq/w+oXPX/AZWr/j+g8m9knj/znMRzMleIK8wV4grz/JnnTzx/4jmZ509cYV44cYW5QlwhrjDPn3hO4grznMzzJ64QV5jnJF4kVK76/4DKVf8fULnq/wMqV/1/QOWq/w+oXPX/AZWr/j+g8i8Q/zbmCvP8mSvEcxLPn7jCPCfznMQV5grxnMQV5jmJK8xzEleYF05cYa4QL5x4/sQV5jmZ5ySuMC8SKlf9f0Dlqv8PqFz1/wGVq/4/oHLV/wdUrvr/gMpV/x9QeRGZF414TuIK8/yZK8RzMleI5ySuMM9JvGjM82eeP/P8medP/PuYF425QlxhXigqV/1/QOWq/w+oXPX/AZWr/j+gctX/B1Su+v+AylX/H1D5VxLPn/nXEc/JXCGek7lCvHDmCvH8iReNuMK8cOI5mSvMFeIKc4V44cS/jXmRULnq/wMqV/1/QOWq/w+oXPX/AZWr/j+gctX/B1Su+v+Ayn8x8fyJK8wV4grznMzzJ64wV4jnZK4Qz8lcIa4wz0k8J/PCiSvMczJXiCvMFeIKc4W4wrxw4grzIqFy1f8HVK76/4DKVf8fULnq/wMqV/1/QOWq/w+oXPX/AZX/YuYKcYW5QlwhnpO4wlwhnpO5wjwnc4X41xHPyTwncYV5TuL5E8/JPCfznMzzJ64w/yZUrvr/gMpV/x9Quer/AypX/X9A5ar/D6hc9f8Blav+P6Dyr2T+dcwV4jmZ589cIZ4/c4V4TuI5mefPPH/mCvH8iRfOvGjEFeaFE1eYK8wV4grzr0Llqv8PqFz1/wGVq/4/oHLV/wdUrvr/gMpV/x9Quer/AyovIvFvI64wz0lcYa4wV4jnT1xhXjTiCvP8iSvMFeI5mefPPCfxnMwV4gpzhbjCXCGeP3OFuUI8f+IK8yKhctX/B1Su+v+AylX/H1C56v8DKlf9f0Dlqv8PqFz1/wEyV/0/QOWq/w+oXPX/AZWr/j+gctX/B1Su+v+AylX/H1C56v8DKlf9f0Dlqv8PqFz1/wGVq/4/oHLV/wdUrvr/gMpV/x9Quer/AypX/X9A5ar/D6hc9f8Blav+P6By1f8HVK76/4DKVf8fULnq/wMqV/1/QOWq/w+oXPX/AZWr/j+gctX/B1Su+v+AylX/H1C56v8D/hEoC75kZ7w7cwAAAABJRU5ErkJggg==",
        "display_to_timestamp": 1744394897000,
        "qr_code_url": null,
        "display_text": null,
        "border_color": null
    },
    "cancellation_reason": "requested_by_customer",
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": "pix",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": null,
    "manual_retry_allowed": false,
    "connector_transaction_id": "33fe7dc7-25a0-4ba5-a7d2-4245fc0b2127",
    "frm_message": null,
    "metadata": {
        "udf1": "value1",
        "login_date": "2019-09-10T10:11:12Z",
        "new_customer": "true"
    },
    "connector_metadata": null,
    "feature_metadata": null,
    "reference_id": "33fe7dc7-25a0-4ba5-a7d2-4245fc0b2127",
    "payment_link": null,
    "profile_id": "pro_d88fTeKAHe2MonTWe8Dk",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_uEuYQIIpwmhh2zZgfnCK",
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2025-04-11T18:08:10.739Z",
    "fingerprint": null,
    "browser_info": {
        "os_type": null,
        "language": null,
        "time_zone": null,
        "ip_address": "::1",
        "os_version": null,
        "user_agent": null,
        "color_depth": null,
        "device_model": null,
        "java_enabled": null,
        "screen_width": null,
        "accept_header": null,
        "screen_height": null,
        "accept_language": "en",
        "java_script_enabled": null
    },
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2025-04-11T17:53:20.936Z",
    "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
}
```

</details>

<details>
<summary>Manual Capture</summary>

Authorize

```curl
curl --location 'http://localhost:8080/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Accept-Language: ja' \
--header 'api-key: dev_ptC2LQhN7u066v4fCKUcOEAWodGDoMl3We9YxN0cM4d7dal16ZSmt9EOdSJ0C6I4' \
--data-raw '{
    "amount": 10400,
    "currency": "BRL",
    "confirm": false,
    "capture_method": "manual",
    "capture_on": "2022-09-10T10:11:12Z",
    "amount_to_capture": 10400,
    "email": "guesjhvghht@example.com",
    "phone": "999999999",
    "phone_country_code": "+1",
    "description": "Its my first payment request",
    "authentication_type": "no_three_ds",
    "return_url": "https://duck.com",
    "billing": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "BR",
            "first_name": "PiX"
        }
    },
    "shipping": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "BR",
            "first_name": "PiX"
        }
    },
    "browser_info": {
		"ip_address": "192.168.0.1",
		"user_agent": "MY LAPTOP RUNS ON m0z://a"
	},
    "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_ytZ1ZAAsTwKK0F7uA2IH",
    "merchant_id": "postman_merchant_GHAction_1744364064",
    "status": "requires_payment_method",
    "amount": 10400,
    "net_amount": 10400,
    "shipping_cost": null,
    "amount_capturable": 0,
    "amount_received": null,
    "connector": null,
    "client_secret": "pay_ytZ1ZAAsTwKK0F7uA2IH_secret_HjrEsQIrDAQunFZVLQY4",
    "created": "2025-04-11T17:55:46.411Z",
    "currency": "BRL",
    "customer_id": null,
    "customer": {
        "id": null,
        "name": null,
        "email": "guesjhvghht@example.com",
        "phone": "999999999",
        "phone_country_code": "+1"
    },
    "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": "manual",
    "payment_method": null,
    "payment_method_data": null,
    "payment_token": null,
    "shipping": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "billing": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "order_details": null,
    "email": null,
    "name": null,
    "phone": null,
    "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": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": null,
    "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_d88fTeKAHe2MonTWe8Dk",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": null,
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2025-04-11T18:10:46.411Z",
    "fingerprint": null,
    "browser_info": {
        "ip_address": "192.168.0.1",
        "user_agent": "MY LAPTOP RUNS ON m0z://a"
    },
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2025-04-11T17:55:46.418Z",
    "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
}
```

Confirm

```curl
curl --location 'http://localhost:8080/payments/pay_ytZ1ZAAsTwKK0F7uA2IH/confirm' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: pk_dev_e765522f7c7543b9844fbcb1ab283a71' \
--data '{
    "payment_method": "bank_transfer",
    "payment_method_type": "pix",
    "payment_method_data": {
        "bank_transfer": {
            "pix": {
                "cpf": "866.656.235-80",
                "source_bank_account_id": "739d6b0a-e92a-40fd-9f58-6d4cdeb699bb",
                "destination_bank_account_id": "91f5cac1-9058-44b7-80e1-80c6f4a6f0bc",
                "pix_qr_expiry": "2025-04-11T19:53:54.807Z"
            }
        }
    },
    "client_secret": "pay_ytZ1ZAAsTwKK0F7uA2IH_secret_HjrEsQIrDAQunFZVLQY4"
}'
```
```json
{
    "error": {
        "type": "invalid_request",
        "message": "Payment method type not supported",
        "code": "IR_19",
        "reason": "manual is not supported by facilitapay"
    }
}
```

</details>


<details>
<summary>Cypress tests</summary>

<img width="889" alt="image" src="https://github.com/user-attachments/assets/09dd0c44-5ca4-4387-bcd4-0555bdc6a615" />

</details>

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

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



<details>
<summary>Authorize call</summary>

```curl
curl --location 'http://localhost:8080/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Accept-Language: ja' \
--header 'api-key: dev_ptC2LQhN7u066v4fCKUcOEAWodGDoMl3We9YxN0cM4d7dal16ZSmt9EOdSJ0C6I4' \
--data-raw '{
    "amount": 10400,
    "currency": "BRL",
    "confirm": false,
    "capture_method": "automatic",
    "capture_on": "2022-09-10T10:11:12Z",
    "amount_to_capture": 10400,
    "email": "guesjhvghht@example.com",
    "phone": "999999999",
    "phone_country_code": "+1",
    "description": "Its my first payment request",
    "authentication_type": "no_three_ds",
    "return_url": "https://duck.com",
    "billing": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "BR",
            "first_name": "PiX"
        }
    },
    "shipping": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "BR",
            "first_name": "PiX"
        }
    },
    "browser_info": {
		"ip_address": "192.168.0.1",
		"user_agent": "MY LAPTOP RUNS ON m0z://a"
	},
    "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_HqjCP9OWtYlxg0KYwPMU",
    "merchant_id": "postman_merchant_GHAction_1744364064",
    "status": "requires_payment_method",
    "amount": 10400,
    "net_amount": 10400,
    "shipping_cost": null,
    "amount_capturable": 0,
    "amount_received": null,
    "connector": null,
    "client_secret": "pay_HqjCP9OWtYlxg0KYwPMU_secret_VZlpnxNdhvw9MExKApxo",
    "created": "2025-04-11T11:27:27.560Z",
    "currency": "BRL",
    "customer_id": null,
    "customer": {
        "id": null,
        "name": null,
        "email": "guesjhvghht@example.com",
        "phone": "999999999",
        "phone_country_code": "+1"
    },
    "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": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "billing": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "order_details": null,
    "email": null,
    "name": null,
    "phone": null,
    "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": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": null,
    "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_d88fTeKAHe2MonTWe8Dk",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": null,
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2025-04-11T11:42:27.560Z",
    "fingerprint": null,
    "browser_info": {
        "ip_address": "192.168.0.1",
        "user_agent": "MY LAPTOP RUNS ON m0z://a"
    },
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2025-04-11T11:27:27.583Z",
    "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
}
```

</details>


<details>
<summary>Confirm call</summary>


```curl
curl --location 'http://localhost:8080/payments/pay_HqjCP9OWtYlxg0KYwPMU/confirm' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: pk_dev_e765522f7c7543b9844fbcb1ab283a71' \
--data '{
    "payment_method": "bank_transfer",
    "payment_method_type": "pix",
    "payment_method_data": {
        "bank_transfer": {
            "pix": {
                "cpf": "866.656.235-80",
                "source_bank_account_id": "739d6b0a-e92a-40fd-9f58-6d4cdeb699bb",
                "destination_bank_account_id": "91f5cac1-9058-44b7-80e1-80c6f4a6f0bc",
                "pix_qr_expiry": "2025-04-11T19:53:54.807Z"
            }
        }
    },
    "client_secret": "pay_HqjCP9OWtYlxg0KYwPMU_secret_VZlpnxNdhvw9MExKApxo"
}'
```
```json
{
    "payment_id": "pay_HqjCP9OWtYlxg0KYwPMU",
    "merchant_id": "postman_merchant_GHAction_1744364064",
    "status": "requires_customer_action",
    "amount": 10400,
    "net_amount": 10400,
    "shipping_cost": null,
    "amount_capturable": 10400,
    "amount_received": null,
    "connector": "facilitapay",
    "client_secret": "pay_HqjCP9OWtYlxg0KYwPMU_secret_VZlpnxNdhvw9MExKApxo",
    "created": "2025-04-11T11:27:27.560Z",
    "currency": "BRL",
    "customer_id": null,
    "customer": {
        "id": null,
        "name": null,
        "email": "guesjhvghht@example.com",
        "phone": "999999999",
        "phone_country_code": "+1"
    },
    "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": "bank_transfer",
    "payment_method_data": {
        "bank_transfer": {
            "pix": {
                "pix_key": null,
                "cpf": "866.***.**5-80",
                "cnpj": null,
                "source_bank_account_id": "739d****-****-****-****-********99bb",
                "destination_bank_account_id": "91f5****-****-****-****-********f0bc"
            }
        },
        "billing": null
    },
    "payment_token": null,
    "shipping": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "billing": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "order_details": null,
    "email": null,
    "name": null,
    "phone": null,
    "return_url": "https://duck.com/",
    "authentication_type": "no_three_ds",
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "next_action": {
        "type": "qr_code_information",
        "image_data_url": "data:image/png;base64,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",
        "display_to_timestamp": 1744371750000,
        "qr_code_url": null,
        "display_text": null,
        "border_color": null
    },
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": "pix",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": null,
    "manual_retry_allowed": null,
    "connector_transaction_id": "aa3223d2-bd54-44d0-8816-fdbeae885c14",
    "frm_message": null,
    "metadata": {
        "udf1": "value1",
        "login_date": "2019-09-10T10:11:12Z",
        "new_customer": "true"
    },
    "connector_metadata": null,
    "feature_metadata": null,
    "reference_id": "aa3223d2-bd54-44d0-8816-fdbeae885c14",
    "payment_link": null,
    "profile_id": "pro_d88fTeKAHe2MonTWe8Dk",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_uEuYQIIpwmhh2zZgfnCK",
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2025-04-11T11:42:27.560Z",
    "fingerprint": null,
    "browser_info": {
        "os_type": null,
        "language": null,
        "time_zone": null,
        "ip_address": "::1",
        "os_version": null,
        "user_agent": null,
        "color_depth": null,
        "device_model": null,
        "java_enabled": null,
        "screen_width": null,
        "accept_header": null,
        "screen_height": null,
        "accept_language": "en",
        "java_script_enabled": null
    },
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2025-04-11T11:27:32.090Z",
    "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
}
```

</details>


<details>
<summary>QR Code</summary>

<img width="691" alt="image" src="https://github.com/user-attachments/assets/5e088c40-aaea-4056-baf5-e81b1a88603d" />

<img width="704" alt="image" src="https://github.com/user-attachments/assets/b87e6a91-a4d7-4dfa-a846-1cf785e8b298" />

</details>

<details>
<summary>Retrieve Call</summary>

```curl
curl --location 'http://localhost:8080/payments/pay_HqjCP9OWtYlxg0KYwPMU?force_sync=true' \
--header 'Accept: application/json' \
--header 'api-key: dev_ptC2LQhN7u066v4fCKUcOEAWodGDoMl3We9YxN0cM4d7dal16ZSmt9EOdSJ0C6I4'
```
```json
{
    "payment_id": "pay_HqjCP9OWtYlxg0KYwPMU",
    "merchant_id": "postman_merchant_GHAction_1744364064",
    "status": "requires_customer_action",
    "amount": 10400,
    "net_amount": 10400,
    "shipping_cost": null,
    "amount_capturable": 10400,
    "amount_received": null,
    "connector": "facilitapay",
    "client_secret": "pay_HqjCP9OWtYlxg0KYwPMU_secret_VZlpnxNdhvw9MExKApxo",
    "created": "2025-04-11T11:27:27.560Z",
    "currency": "BRL",
    "customer_id": null,
    "customer": {
        "id": null,
        "name": null,
        "email": "guesjhvghht@example.com",
        "phone": "999999999",
        "phone_country_code": "+1"
    },
    "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": "bank_transfer",
    "payment_method_data": {
        "bank_transfer": {
            "pix": {
                "pix_key": null,
                "cpf": "866.***.**5-80",
                "cnpj": null,
                "source_bank_account_id": "739d****-****-****-****-********99bb",
                "destination_bank_account_id": "91f5****-****-****-****-********f0bc"
            }
        },
        "billing": null
    },
    "payment_token": null,
    "shipping": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "billing": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "order_details": null,
    "email": null,
    "name": null,
    "phone": null,
    "return_url": "https://duck.com/",
    "authentication_type": "no_three_ds",
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "next_action": {
        "type": "qr_code_information",
        "image_data_url": "data:image/png;base64,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",
        "display_to_timestamp": 1744371750000,
        "qr_code_url": null,
        "display_text": null,
        "border_color": null
    },
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": "pix",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": null,
    "manual_retry_allowed": null,
    "connector_transaction_id": "aa3223d2-bd54-44d0-8816-fdbeae885c14",
    "frm_message": null,
    "metadata": {
        "udf1": "value1",
        "login_date": "2019-09-10T10:11:12Z",
        "new_customer": "true"
    },
    "connector_metadata": null,
    "feature_metadata": null,
    "reference_id": "aa3223d2-bd54-44d0-8816-fdbeae885c14",
    "payment_link": null,
    "profile_id": "pro_d88fTeKAHe2MonTWe8Dk",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_uEuYQIIpwmhh2zZgfnCK",
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2025-04-11T11:42:27.560Z",
    "fingerprint": null,
    "browser_info": {
        "os_type": null,
        "language": null,
        "time_zone": null,
        "ip_address": "::1",
        "os_version": null,
        "user_agent": null,
        "color_depth": null,
        "device_model": null,
        "java_enabled": null,
        "screen_width": null,
        "accept_header": null,
        "screen_height": null,
        "accept_language": "en",
        "java_script_enabled": null
    },
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2025-04-11T12:02:17.950Z",
    "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
}
```

</details>

<details>
<summary>Refund call</summary>

```curl
curl --location 'http://localhost:8080/refunds' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_ptC2LQhN7u066v4fCKUcOEAWodGDoMl3We9YxN0cM4d7dal16ZSmt9EOdSJ0C6I4' \
--data '{
    "payment_id": "pay_HqjCP9OWtYlxg0KYwPMU",
    "amount": 600,
    "reason": "Customer returned product",
    "refund_type": "instant",
    "metadata": {
        "udf1": "value1",
        "new_customer": "true",
        "login_date": "2019-09-10T10:11:12Z"
    }
}'
```
```json
{
    "error": {
        "type": "invalid_request",
        "message": "This Payment could not be refund because it has a status of requires_customer_action. The expected state is succeeded, partially_captured",
        "code": "IR_14"
    }
}
```
</details>

<details>
<summary>Void call</summary>

Authorize

```curl
curl --location 'http://localhost:8080/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Accept-Language: ja' \
--header 'api-key: dev_ptC2LQhN7u066v4fCKUcOEAWodGDoMl3We9YxN0cM4d7dal16ZSmt9EOdSJ0C6I4' \
--data-raw '{
    "amount": 10400,
    "currency": "BRL",
    "confirm": false,
    "capture_method": "automatic",
    "capture_on": "2022-09-10T10:11:12Z",
    "amount_to_capture": 10400,
    "email": "guesjhvghht@example.com",
    "phone": "999999999",
    "phone_country_code": "+1",
    "description": "Its my first payment request",
    "authentication_type": "no_three_ds",
    "return_url": "https://duck.com",
    "billing": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "BR",
            "first_name": "PiX"
        }
    },
    "shipping": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "BR",
            "first_name": "PiX"
        }
    },
    "browser_info": {
		"ip_address": "192.168.0.1",
		"user_agent": "MY LAPTOP RUNS ON m0z://a"
	},
    "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_oEMHiZFEcOnYfhKdCGkX",
    "merchant_id": "postman_merchant_GHAction_1744364064",
    "status": "requires_payment_method",
    "amount": 10400,
    "net_amount": 10400,
    "shipping_cost": null,
    "amount_capturable": 0,
    "amount_received": null,
    "connector": null,
    "client_secret": "pay_oEMHiZFEcOnYfhKdCGkX_secret_4pCGB9AmNlBGvZUcT8La",
    "created": "2025-04-11T17:53:10.739Z",
    "currency": "BRL",
    "customer_id": null,
    "customer": {
        "id": null,
        "name": null,
        "email": "guesjhvghht@example.com",
        "phone": "999999999",
        "phone_country_code": "+1"
    },
    "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": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "billing": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "order_details": null,
    "email": null,
    "name": null,
    "phone": null,
    "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": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": null,
    "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_d88fTeKAHe2MonTWe8Dk",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": null,
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2025-04-11T18:08:10.739Z",
    "fingerprint": null,
    "browser_info": {
        "ip_address": "192.168.0.1",
        "user_agent": "MY LAPTOP RUNS ON m0z://a"
    },
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2025-04-11T17:53:10.747Z",
    "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
}
```

Confirm

```curl
curl --location 'http://localhost:8080/payments/pay_oEMHiZFEcOnYfhKdCGkX/confirm' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: pk_dev_e765522f7c7543b9844fbcb1ab283a71' \
--data '{
    "payment_method": "bank_transfer",
    "payment_method_type": "pix",
    "payment_method_data": {
        "bank_transfer": {
            "pix": {
                "cpf": "866.656.235-80",
                "source_bank_account_id": "739d6b0a-e92a-40fd-9f58-6d4cdeb699bb",
                "destination_bank_account_id": "91f5cac1-9058-44b7-80e1-80c6f4a6f0bc",
                "pix_qr_expiry": "2025-04-11T19:53:54.807Z"
            }
        }
    },
    "client_secret": "pay_oEMHiZFEcOnYfhKdCGkX_secret_4pCGB9AmNlBGvZUcT8La"
}'
```
```json
{
    "payment_id": "pay_oEMHiZFEcOnYfhKdCGkX",
    "merchant_id": "postman_merchant_GHAction_1744364064",
    "status": "requires_customer_action",
    "amount": 10400,
    "net_amount": 10400,
    "shipping_cost": null,
    "amount_capturable": 10400,
    "amount_received": null,
    "connector": "facilitapay",
    "client_secret": "pay_oEMHiZFEcOnYfhKdCGkX_secret_4pCGB9AmNlBGvZUcT8La",
    "created": "2025-04-11T17:53:10.739Z",
    "currency": "BRL",
    "customer_id": null,
    "customer": {
        "id": null,
        "name": null,
        "email": "guesjhvghht@example.com",
        "phone": "999999999",
        "phone_country_code": "+1"
    },
    "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": "bank_transfer",
    "payment_method_data": {
        "bank_transfer": {
            "pix": {
                "pix_key": null,
                "cpf": "866.***.**5-80",
                "cnpj": null,
                "source_bank_account_id": "739d****-****-****-****-********99bb",
                "destination_bank_account_id": "91f5****-****-****-****-********f0bc"
            }
        },
        "billing": null
    },
    "payment_token": null,
    "shipping": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "billing": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "order_details": null,
    "email": null,
    "name": null,
    "phone": null,
    "return_url": "https://duck.com/",
    "authentication_type": "no_three_ds",
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "next_action": {
        "type": "qr_code_information",
        "image_data_url": "data:image/png;base64,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",
        "display_to_timestamp": 1744394897000,
        "qr_code_url": null,
        "display_text": null,
        "border_color": null
    },
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": "pix",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": null,
    "manual_retry_allowed": null,
    "connector_transaction_id": "33fe7dc7-25a0-4ba5-a7d2-4245fc0b2127",
    "frm_message": null,
    "metadata": {
        "udf1": "value1",
        "login_date": "2019-09-10T10:11:12Z",
        "new_customer": "true"
    },
    "connector_metadata": null,
    "feature_metadata": null,
    "reference_id": "33fe7dc7-25a0-4ba5-a7d2-4245fc0b2127",
    "payment_link": null,
    "profile_id": "pro_d88fTeKAHe2MonTWe8Dk",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_uEuYQIIpwmhh2zZgfnCK",
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2025-04-11T18:08:10.739Z",
    "fingerprint": null,
    "browser_info": {
        "os_type": null,
        "language": null,
        "time_zone": null,
        "ip_address": "::1",
        "os_version": null,
        "user_agent": null,
        "color_depth": null,
        "device_model": null,
        "java_enabled": null,
        "screen_width": null,
        "accept_header": null,
        "screen_height": null,
        "accept_language": "en",
        "java_script_enabled": null
    },
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2025-04-11T17:53:19.350Z",
    "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
}
```

Void

```curl
curl --location 'http://localhost:8080/payments/pay_oEMHiZFEcOnYfhKdCGkX/cancel' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_ptC2LQhN7u066v4fCKUcOEAWodGDoMl3We9YxN0cM4d7dal16ZSmt9EOdSJ0C6I4' \
--data '{"cancellation_reason":"requested_by_customer"}'
```
```json
{
    "payment_id": "pay_oEMHiZFEcOnYfhKdCGkX",
    "merchant_id": "postman_merchant_GHAction_1744364064",
    "status": "cancelled",
    "amount": 10400,
    "net_amount": 10400,
    "shipping_cost": null,
    "amount_capturable": 10400,
    "amount_received": null,
    "connector": "facilitapay",
    "client_secret": "pay_oEMHiZFEcOnYfhKdCGkX_secret_4pCGB9AmNlBGvZUcT8La",
    "created": "2025-04-11T17:53:10.739Z",
    "currency": "BRL",
    "customer_id": null,
    "customer": {
        "id": null,
        "name": null,
        "email": "guesjhvghht@example.com",
        "phone": "999999999",
        "phone_country_code": "+1"
    },
    "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": "bank_transfer",
    "payment_method_data": {
        "bank_transfer": {
            "pix": {
                "pix_key": null,
                "cpf": "866.***.**5-80",
                "cnpj": null,
                "source_bank_account_id": "739d****-****-****-****-********99bb",
                "destination_bank_account_id": "91f5****-****-****-****-********f0bc"
            }
        },
        "billing": null
    },
    "payment_token": null,
    "shipping": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "billing": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "order_details": null,
    "email": null,
    "name": null,
    "phone": null,
    "return_url": "https://duck.com/",
    "authentication_type": "no_three_ds",
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "next_action": {
        "type": "qr_code_information",
        "image_data_url": "data:image/png;base64,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",
        "display_to_timestamp": 1744394897000,
        "qr_code_url": null,
        "display_text": null,
        "border_color": null
    },
    "cancellation_reason": "requested_by_customer",
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": "pix",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": null,
    "manual_retry_allowed": false,
    "connector_transaction_id": "33fe7dc7-25a0-4ba5-a7d2-4245fc0b2127",
    "frm_message": null,
    "metadata": {
        "udf1": "value1",
        "login_date": "2019-09-10T10:11:12Z",
        "new_customer": "true"
    },
    "connector_metadata": null,
    "feature_metadata": null,
    "reference_id": "33fe7dc7-25a0-4ba5-a7d2-4245fc0b2127",
    "payment_link": null,
    "profile_id": "pro_d88fTeKAHe2MonTWe8Dk",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_uEuYQIIpwmhh2zZgfnCK",
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2025-04-11T18:08:10.739Z",
    "fingerprint": null,
    "browser_info": {
        "os_type": null,
        "language": null,
        "time_zone": null,
        "ip_address": "::1",
        "os_version": null,
        "user_agent": null,
        "color_depth": null,
        "device_model": null,
        "java_enabled": null,
        "screen_width": null,
        "accept_header": null,
        "screen_height": null,
        "accept_language": "en",
        "java_script_enabled": null
    },
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2025-04-11T17:53:20.936Z",
    "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
}
```

</details>

<details>
<summary>Manual Capture</summary>

Authorize

```curl
curl --location 'http://localhost:8080/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Accept-Language: ja' \
--header 'api-key: dev_ptC2LQhN7u066v4fCKUcOEAWodGDoMl3We9YxN0cM4d7dal16ZSmt9EOdSJ0C6I4' \
--data-raw '{
    "amount": 10400,
    "currency": "BRL",
    "confirm": false,
    "capture_method": "manual",
    "capture_on": "2022-09-10T10:11:12Z",
    "amount_to_capture": 10400,
    "email": "guesjhvghht@example.com",
    "phone": "999999999",
    "phone_country_code": "+1",
    "description": "Its my first payment request",
    "authentication_type": "no_three_ds",
    "return_url": "https://duck.com",
    "billing": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "BR",
            "first_name": "PiX"
        }
    },
    "shipping": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "BR",
            "first_name": "PiX"
        }
    },
    "browser_info": {
		"ip_address": "192.168.0.1",
		"user_agent": "MY LAPTOP RUNS ON m0z://a"
	},
    "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_ytZ1ZAAsTwKK0F7uA2IH",
    "merchant_id": "postman_merchant_GHAction_1744364064",
    "status": "requires_payment_method",
    "amount": 10400,
    "net_amount": 10400,
    "shipping_cost": null,
    "amount_capturable": 0,
    "amount_received": null,
    "connector": null,
    "client_secret": "pay_ytZ1ZAAsTwKK0F7uA2IH_secret_HjrEsQIrDAQunFZVLQY4",
    "created": "2025-04-11T17:55:46.411Z",
    "currency": "BRL",
    "customer_id": null,
    "customer": {
        "id": null,
        "name": null,
        "email": "guesjhvghht@example.com",
        "phone": "999999999",
        "phone_country_code": "+1"
    },
    "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": "manual",
    "payment_method": null,
    "payment_method_data": null,
    "payment_token": null,
    "shipping": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "billing": {
        "address": {
            "city": "San Fransico",
            "country": "BR",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": null
        },
        "phone": null,
        "email": null
    },
    "order_details": null,
    "email": null,
    "name": null,
    "phone": null,
    "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": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": null,
    "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_d88fTeKAHe2MonTWe8Dk",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": null,
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2025-04-11T18:10:46.411Z",
    "fingerprint": null,
    "browser_info": {
        "ip_address": "192.168.0.1",
        "user_agent": "MY LAPTOP RUNS ON m0z://a"
    },
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2025-04-11T17:55:46.418Z",
    "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
}
```

Confirm

```curl
curl --location 'http://localhost:8080/payments/pay_ytZ1ZAAsTwKK0F7uA2IH/confirm' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: pk_dev_e765522f7c7543b9844fbcb1ab283a71' \
--data '{
    "payment_method": "bank_transfer",
    "payment_method_type": "pix",
    "payment_method_data": {
        "bank_transfer": {
            "pix": {
                "cpf": "866.656.235-80",
                "source_bank_account_id": "739d6b0a-e92a-40fd-9f58-6d4cdeb699bb",
                "destination_bank_account_id": "91f5cac1-9058-44b7-80e1-80c6f4a6f0bc",
                "pix_qr_expiry": "2025-04-11T19:53:54.807Z"
            }
        }
    },
    "client_secret": "pay_ytZ1ZAAsTwKK0F7uA2IH_secret_HjrEsQIrDAQunFZVLQY4"
}'
```
```json
{
    "error": {
        "type": "invalid_request",
        "message": "Payment method type not supported",
        "code": "IR_19",
        "reason": "manual is not supported by facilitapay"
    }
}
```

</details>


<details>
<summary>Cypress tests</summary>

<img width="889" alt="image" src="https://github.com/user-attachments/assets/09dd0c44-5ca4-4387-bcd4-0555bdc6a615" />

</details>
