Integration Roadmap

Payment Flows

Below you can find an example of a standard Klarna flow.

  • Next step is entering the OTP received code.1 Enter required details
  • Once the OTP code is confirmed, an intermediary processing page is displayed, followed by transaction confirmation.1 Enter required details
  • Create a Payment

    Definition: POST /v1/payments

    To initiate a payment, you must create a payment object. The parameters of the payment are sent in the message body as a JSON object.

    We recommend that the billing country (Payment.BillingAddress.Country) parameter to be sent. If this parameter is not sent the country is determined using IP detection, which is not always reliable. This parameter is used in various scenarios and an accurate value will increase conversion.

    A 201 HTTP response (Created) is returned if the payment was correctly initialized.

    The Customer ID parameter, the unique number that identifies the customer in the GlobalPay system, it will only be returned in response for the following payment methods: Debito Banco do Brasil (32), MercadoPago(46), Boleto (1000), Transferencia entre contas (1002), Cards Argentina (1079), Santander Rio (1080), Cash Payments Argentina (1081), Credit Cards Brazil (1082), Boleto Brazil (1083), Online Bank Transfer Brazil (1084), Credit Cards Chile (1085), Servipag (1086), WebPay (1087), Cards Colombia (1088), PSE Colombia (1089), Cash payment Colombia (1090), Cards Mexico (1091), Oxxo (1092), SPEI (1093), Bank Transfer Mexico (1094), Credit Cards Uruguay (1095), Redpagos (1096), Credit Cards(Visa) (1097), Cash payment Peru (1098), Bank Transfer Peru (1099).

    Request:

    POST https://paytest.smart2pay.com/v1/payments
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
        "Payment": {
            "MerchantTransactionID": "S2P-Test-1621433574",
            "Amount": 2000,
            "Currency": "USD",
            "ReturnURL": "http://demo.smart2pay.com/redirect.php",
            "ClientIP": "82.208.151.136", 
            "Capture": false,
            "3DSecure": false,
            "Card": {
                "HolderName": "John Doe",
                "Number": "4000023104662535",
                "ExpirationMonth": "02",
                "ExpirationYear": "2022",
                "SecurityCode": "123"
            },
            "BillingAddress": { 
                "Country": "RO"
            },
            "Customer": {
                "Email": "test@test.com"
            }
        }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Payment": {
            "ID": 4683165,
            "SkinID": null,
            "ClientIP": null,
            "Created": "20190621075306",
            "MerchantTransactionID": "s2ptest_ga1",
            "OriginatorTransactionID": null,
            "Amount": "11",
            "Currency": "CNY",
            "CapturedAmount": null,
            "ReturnURL": "http://demo.smart2pay.com/redirect.php",
            "Description": "",
            "MethodID": 1066,
            "MethodOptionID": null,
            "IncludeMethodIDs": null,
            "ExcludeMethodIDs": null,
            "PrioritizeMethodIDs": null,
            "SiteID": 30201,
            "NotificationDateTime": null,
            "Customer": {
                "MerchantCustomerID": null,
                "Email": "youremail@email.com",
                "FirstName": null,
                "LastName": null,
                "Gender": null,
                "SocialSecurityNumber": null,
                "Phone": null,
                "Company": null,
                "DateOfBirth": null
            },
            "BillingAddress": {
                "ID": 291,
                "City": null,
                "ZipCode": null,
                "State": null,
                "Street": null,
                "StreetNumber": null,
                "HouseNumber": null,
                "HouseExtension": null,
                "Country": "CN"
            },
            "ShippingAddress": null,
            "Articles": null,
            "Details": null,
            "ReferenceDetails": {
                "BankCode": null,
                "BankName": null,
                "EntityID": null,
                "EntityNumber": null,
                "ReferenceID": null,
                "ReferenceNumber": null,
                "SwiftBIC": null,
                "AccountCurrency": null,
                "AccountNumber": null,
                "AccountHolder": null,
                "IBAN": null,
                "AmountToPay": null,
                "QRCodeURL": "weixin://wxpay/bizpayurl?pr=dHj3ZkU",
                "Instructions": null,
                "BoletoURL": null
            },
            "CustomParameters": null,
            "PreapprovalID": null,
            "Status": {
                "ID": 1,
                "Info": "Open",
                "Reasons": null
            },
            "Fraud": null,
            "MethodTransactionID": null,
            "TokenLifetime": 10,
            "Capture": null,
            "PreapprovalDetails": null,
            "RedirectURL": "https://apitest.smart2pay.com/Home?PaymentToken=D70DBE70D7A4FE3E0E6E035665B5598A.4683165"
        }
    }

    In order to initiate a Card payment, the payment object must contain the necessary card details.

    Request:

    POST https://securetest.smart2pay.com/v1/payments
    Authorization: Basic MTAxMDpnYWJp
    
    {
      "Payment": {
        "MerchantTransactionID": "s2ptest_h2",
        "Amount": 2000,
        "Currency": "EUR",
        "Card": {
          "HolderName": "John Doe",
          "Number": "4111111111111111",
          "ExpirationMonth": "02",
          "ExpirationYear": "2018",
          "SecurityCode": "312"
        },		
         "Capture": true
      }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
      "Payment": {
        "ID": 202230,
        "ClientIP": null,
        "SkinID": null,
        "Created": "20161205084103",
        "MerchantTransactionID": "s2ptest_h2",
        "OriginatorTransactionID": null,
        "Amount": "2000",
        "Currency": "EUR",
        "CapturedAmount": 2000,
        "ReturnURL": null,
        "Description": null,
        "StatementDescriptor": null,
        "MethodID": 6,
        "MethodOptionID": null,
        "SiteID": 1010,
        "NotificationDateTime": null,
        "Customer": null,
        "BillingAddress": null,
        "ShippingAddress": null,
        "Articles": null,
        "Card": {
          "HolderName": "John Doe",
          "Number": "VISA-1111",
          "ExpirationMonth": "02",
          "ExpirationYear": "2018"
        },
        "CreditCardToken": null,
        "Status": {
          "ID": 11,
          "Info": "Captured",
          "Reasons": []
        },
        "MethodTransactionID": null,
        "PaymentTokenLifetime": null,
        "Capture": true,
        "Retry": false,
        "RedirectURL": null,
        "3DSecure": null
      }
    }

    In case of an API error, an HTTP 4xx (you did something wrong) or HTTP 5xx (we did something wrong) response is returned.

    For more information about the reasons of a wrong request response see our section GlobalPay Return Codes.

    Request:

    POST https://paytest.smart2pay.com/v1/payments
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Payment": {
        "MerchantTransactionID": "s2ptest_g213",
        "Amount": 11,
        "Currency": "CNY",      
        "MethodID": 1066,
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",      
        "TokenLifetime": 10,
        "Customer": {    
          "Email": "youremail@email.com"   
        },
        "BillingAddress": {
          "Country": "CNN"
        }
      }
    }

    Response:

    HTTP/1.1 400 Bad Request
    Content-Type: application/json; charset=utf-8
    
    {
      "Payment": {
        "ID": 3470485,
        "SkinID": null,
        "ClientIP": null,
        "Created": "20171216150143",
        "MerchantTransactionID": "s2ptest_g213",
        "OriginatorTransactionID": null,
        "Amount": "11",
        "Currency": "CNY",
        "CapturedAmount": null,
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": null,
        "MethodID": 1066,
        "MethodOptionID": null,
        "IncludeMethodIDs": null,
        "ExcludeMethodIDs": null,
        "PrioritizeMethodIDs": null,
        "SiteID": 30201,
        "NotificationDateTime": "20171216150143",
        "Customer": null,
        "BillingAddress": null,
        "ShippingAddress": null,
        "Articles": null,
        "Details": null,
        "ReferenceDetails": null,
        "CustomParameters": null,
        "PreapprovalID": null,
        "Status": {
          "ID": 4,
          "Info": "Failed",
          "Reasons": [
            {
              "Code": 147,
              "Info": "Address details are invalid (BillingAddress)Country - RegEx: ^[a-zA-Z]{2}$;"
            }
          ]
        },
        "MethodTransactionID": null,
        "TokenLifetime": null,
        "Capture": null,
        "PreapprovalDetails": null,
        "RedirectURL": null
      }
    }

    When the validation fails for a Card payment, an invalid request is inserted in the database and the ID of the newly inserted invalid request is sent in the Payment response. The value of the element InvalidRequestID is prefixed with ”i” to not be confused with the Payment ID.

    Request:

    POST https://securetest.smart2pay.com/v1/payments
    Authorization: Basic MTAxMDpnYWJp
    
    {
      "Payment": {
        "MerchantTransactionID": "s2ptest_h2",
        "Amount": 2000,
        "Currency": "EUR",
        "Card": {
          "HolderName": "John Doe",
          "Number": "4111111111111111",
          "ExpirationMonth": "02",
          "ExpirationYear": "2018",
          "SecurityCode": "312"
        },		
         "Capture": true
      }
    }

    Response:

    HTTP/1.1 400 Bad Request
    Content-Type: application/json; charset=utf-8
    
    {
      "Payment": {
        "InvalidRequestID": "i3065",
        "ID": null,
        "ClientIP": null,
        "SkinID": null,
        "Created": null,
        "MerchantTransactionID": "s2ptest_h2",
        "OriginatorTransactionID": null,
        "Amount": "2000",
        "Currency": "EUR",
        "CapturedAmount": 0,
        "ReturnURL": null,
        "Description": null,
        "StatementDescriptor": null,
        "MethodID": 6,
        "MethodOptionID": null,
        "SiteID": 1010,
        "NotificationDateTime": null,
        "Customer": null,
        "BillingAddress": null,
        "ShippingAddress": null,
        "Articles": null,
        "Card": {
          "HolderName": "John Doe",
          "Number": "Ends with 1111",
          "ExpirationMonth": "02",
          "ExpirationYear": "2018"
        },
        "CreditCardToken": null,
        "Status": {
          "ID": null,
          "Info": null,
          "Reasons": [
            {
              "Code": 20,
              "Info": "Key is duplicated"
            }
          ]
        },
        "MethodTransactionID": null,
        "PaymentTokenLifetime": null,
        "Capture": true,
        "Retry": false,
        "RedirectURL": null,
        "3DSecure": null
      }
    }

    Please visit our section: Create a complex payment in order to see a full example of a payment with all the parameters needed for the request. The parameters are sent in the message body as a JSON object.

    Klarna Debit Risk Payment Request

    Definition: POST https://paytest.smart2pay.com/v1/payments

    Below you will find a full example of a payment request for Klarna Debit Risk method (with Success and Bad response). The parameters of the payment are sent in the message body as a JSON object.

    For Klarna Debit Risk payments only the following Amount, Currency, Country parameters are mandatory to be sent in the request, the rest of them are optional:

    • Amount – Order amount;
    • Currency – Purchase currency;
    • Country – Purchase country.

    For a smoother user experience, we recommend always sending the Method ID 1183.

    A 201 HTTP response (Created) is returned if the payment was correctly initialized.

    For more information about status codes, please go to Basic HTTP Status Codes.

    Request:

    POST https://paytest.smart2pay.com/v1/payments
    Authorization: Basic MzAxOTk6OG16L0lsZkpaejIyVVhVUlFSeXRvdExQQ3pkWVJQekVmNHpyNDdBUWROWWxiUUxpTWc=
    
    {
        "Payment": {
            "Amount": 100,
            "Currency": "GBP",
            "OriginatorTransactionID": "12345",
            "MethodID": "1183",
            "Description": "test",
            "ReturnURL": "http://demo2.smart2pay.com/redirect.php",
            "MerchantTransactionID": "KlarnaPayments-{{$timestamp}}",
            "Articles": [
                {
                    "MerchantArticleID": "5009000",
                    "Name": "TEST",
                    "Quantity": 1,
                    "Price": 100,
                    "VAT": 10,
                    "Discount": 0,
                    "Type": 5,
                    "TaxType": "0"
                }
            ],
            "BillingAddress": {
                "HouseExtension": "25",
                "HouseNumber": "22",
                "Street": "Great Russell",
                "StreetNumber": "1",
                "City": "London",
                "Region": "St. Jaoum es",
                "Phone": "00447516300001",
                "ZipCode": "WC1B 3DG",
                "Country": "GB"
            },
            "Customer": {
                "email": "test@test.com",
                "Phone": "00447516300001",
                "FirstName": "Doe",
                "LastName": "John"
            },
            "TokenLifetime": 10
        }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Payment": {
            "ID": 27146999,
            "SkinID": null,
            "ClientIP": null,
            "Created": "20240517091703",
            "MerchantTransactionID": "KlarnaPayments-1715937424",
            "OriginatorTransactionID": "12345",
            "Amount": "100",
            "Currency": "GBP",
            "CapturedAmount": null,
            "ReturnURL": "http://demo2.smart2pay.com/redirect.php",
            "ReturnURLSuccess": null,
            "ReturnURLFailure": null,
            "ReturnURLCancel": null,
            "ReturnURLProcessing": null,
            "Description": "test",
            "MethodID": 1183,
            "MethodOptionID": null,
            "MethodOptionIdString": null,
            "BankName": null,
            "IncludeMethodIDs": null,
            "ExcludeMethodIDs": null,
            "PrioritizeMethodIDs": null,
            "SiteID": 30199,
            "NotificationDateTime": null,
            "Customer": {
                "MerchantCustomerID": null,
                "Email": "test@test.com",
                "FirstName": "Doe",
                "LastName": "John",
                "Gender": null,
                "SocialSecurityNumber": null,
                "Phone": "00447516300001",
                "Company": null,
                "DateOfBirth": null
            },
            "BillingAddress": {
                "City": "London",
                "ZipCode": "WC1B 3DG",
                "State": null,
                "Street": "Great Russell",
                "StreetNumber": "1",
                "HouseNumber": "22",
                "HouseExtension": "25",
                "Country": "GB"
            },
            "ShippingAddress": null,
            "Articles": [
                {
                    "MerchantArticleID": "5009000",
                    "Name": "TEST",
                    "Quantity": 1,
                    "Price": "100",
                    "VAT": "10",
                    "Discount": "0",
                    "Type": "5",
                    "TaxType": 0,
                    "DiscountValue": "0"
                }
            ],
            "Details": null,
            "ReferenceDetails": null,
            "CustomParameters": null,
            "PreapprovalID": null,
            "Status": {
                "ID": 1,
                "Info": "Open",
                "Reasons": null
            },
            "Fraud": null,
            "MethodTransactionID": null,
            "OriginalMerchantTID": null,
            "Unknown": false,
            "TokenLifetime": 10,
            "Capture": null,
            "PreapprovalDetails": null,
            "RedirectURL": "https://gw-apm-globalpayapi.nuvei.com/Home?PaymentToken=3C1FBA02E352FA06F5EE3C7FE524D0F8.27146999",
            "Splits": null
        }
    }

    In case of an API error, an HTTP 4xx (you did something wrong) or HTTP 5xx (we did something wrong) response is returned.

    For more information about the reasons of a wrong request response see our section GlobalPay Return Codes.

    Request:

    POST https://paytest.smart2pay.com/v1/payments
    Authorization: Basic MzAxOTk6OG16L0lsZkpaejIyVVhVUlFSeXRvdExQQ3pkWVJQekVmNHpyNDdBUWROWWxiUUxpTWc=
    
    {
        "Payment": {
            "Amount": 200,
            "Currency": "GBP",
            "OriginatorTransactionID": "12345",
            "MethodID": "1183",
            "Description": "test",
            "ReturnURL": "http://demo2.smart2pay.com/redirect.php",
            "MerchantTransactionID": "KlarnaPayments-{{$timestamp}}",
            "Articles": [
                {
                    "MerchantArticleID": "5009000",
                    "Name": "TEST",
                    "Quantity": 1,
                    "Price": 100,
                    "VAT": 10,
                    "Discount": 0,
                    "Type": 5,
                    "TaxType": "0"
                }
            ],
            "BillingAddress": {
                "HouseExtension": "25",
                "HouseNumber": "22",
                "Street": "Great Russell",
                "StreetNumber": "1",
                "City": "London",
                "Region": "St. Jaoum es",
                "Phone": "00447516300001",
                "ZipCode": "WC1B 3DG",
                "Country": "GB"
            },
            "Customer": {
                "email": "test@test.com",
                "Phone": "00447516300001",
                "FirstName": "Doe",
                "LastName": "John"
            },
            "TokenLifetime": 10
        }
    }

    Response:

    HTTP/1.1 400 Bad Request
    Content-Type: application/json; charset=utf-8
    
    {
        "Payment": {
            "ID": 27147115,
            "SkinID": null,
            "ClientIP": null,
            "Created": "20240517130108",
            "MerchantTransactionID": "KlarnaPayments-1715950869",
            "OriginatorTransactionID": null,
            "Amount": "200",
            "Currency": "GBP",
            "CapturedAmount": null,
            "ReturnURL": "http://demo2.smart2pay.com/redirect.php",
            "ReturnURLSuccess": null,
            "ReturnURLFailure": null,
            "ReturnURLCancel": null,
            "ReturnURLProcessing": null,
            "Description": "test",
            "MethodID": 1183,
            "MethodOptionID": null,
            "MethodOptionIdString": null,
            "BankName": null,
            "IncludeMethodIDs": null,
            "ExcludeMethodIDs": null,
            "PrioritizeMethodIDs": null,
            "SiteID": 30199,
            "NotificationDateTime": "20240517130109",
            "Customer": {
                "MerchantCustomerID": null,
                "Email": "test@test.com",
                "FirstName": "Doe",
                "LastName": "John",
                "Gender": null,
                "SocialSecurityNumber": null,
                "Phone": "00447516300001",
                "Company": null,
                "DateOfBirth": null
            },
            "BillingAddress": {
                "City": "London",
                "ZipCode": "WC1B 3DG",
                "State": null,
                "Street": "Great Russell",
                "StreetNumber": "1",
                "HouseNumber": "22",
                "HouseExtension": "25",
                "Country": "GB"
            },
            "ShippingAddress": null,
            "Articles": [
                {
                    "MerchantArticleID": "5009000",
                    "Name": "TEST",
                    "Quantity": 1,
                    "Price": "100",
                    "VAT": "10",
                    "Discount": "0",
                    "Type": "5",
                    "TaxType": 0,
                    "DiscountValue": "0"
                }
            ],
            "Details": null,
            "ReferenceDetails": null,
            "CustomParameters": null,
            "PreapprovalID": null,
            "Status": {
                "ID": 4,
                "Info": "Failed",
                "Reasons": [
                    {
                        "Code": "118",
                        "Info": "Amount invalid"
                    }
                ]
            },
            "Fraud": null,
            "MethodTransactionID": null,
            "OriginalMerchantTID": null,
            "Unknown": false,
            "TokenLifetime": null,
            "Capture": null,
            "PreapprovalDetails": null,
            "RedirectURL": null,
            "Splits": null
        }
    }

    Klarna Debit Risk – Test Data

    In order for you to test the Klarna Debit Risk payment method successfully, please use the below test data.

    Test Data
    DataValue
    Email for Austria:
  • Approved: customer@email.at
  • Denied: customer+denied@email.at
  • Email for Germany:
  • Approved: customer@email.de
  • Denied: customer+denied@email.de
  • Email for United Kingdom:
  • Approved: customer@email.uk
  • Denied: customer+denied@email.uk
  • First Name:Enter any name. Example: Doe
    Last Name:Enter any name. Example: Test
    Phone Number for Austria:
  • Approved: +4306762600456
  • Denied: +4306762600745
  • Phone Number for Germany:
  • Approved: +49017614284340
  • Denied: +49017610927312
  • Phone Number for United Kingdom:
  • Approved: +447755564318
  • Denied: +447355505530
  • CityEnter any city. Example: London
    StreetEnter any street. Example: Great Russell
    Zip CodeEnter any valid zip code. Example: WC1B 3DG
    Available countries:AT, DE, GB
    Article Type:4 = Discount, 5 = Physical, 6 = Shipping_fee, 7 = Sales_tax, 8 = Digital, 9 = Gift_card, 10 = Store_credit, 11 = Surcharge
    Additional Test Data required from the customer on the provider’s page
    CountryDate of Birth
    Austria (AT):Format is Day/Month/Year (DD-MM-YYYY) Enter any date.
    Germany (DE):Format is Day/Month/Year (DD-MM-YYYY) Enter any date.
    United Kingdom: (GB):Format is Day/Month/Year (DD-MM-YYYY) Enter any date.

    For more details about the specific personal details required please go to our section: Payment flows per country.

    Klarna Debit Risk Payment Flow

    1. This is considered a standard payment flow where the customer has selected the United Kingdom as the country. If the customer hasn’t provided in the first step one of the required personal details: email, first name and last name, he will provide this info on a intermediary page. In order to continue, the customer also needs to agree to storing and processing his/her personal information used in the payment flow. Customer Details
    2. The customer needs to press on the ‘Pay with Klarna’ button. Confirm and pay
    3. The customer needs to provide Username and Password, for test purposes it can be used “Test” and “12345” and press on the ‘Continue’ button. Scan to pay
    4. The customer needs to provide the OTP code, for test purposes it can be used ‘12345’ and press on the ‘Continue’ button.Testbank
    5. If the details are filled correctly by the customer, the transaction is completed and you will receive a notification with the success status. Meanwhile, the customer is redirected to your ReturnURL.Payment confirmation pending

    iDEAL 2.0 Test Data

    In order for you to test the iDEAL payment method successfully, please use the below test data.

    iDEAL Test Data
    Data Value
    Your bank: TESTNL2A

    iDEAL 2.0 Payment Flow – Desktop version

    1. The customer selects the bank from the iDEAL page.

      1 Bank selection

    2. The customer confirms the transaction by clicking on the Success button.

      1 Transaction confirmation

    3. Upon completion of the payment flow, the customer is redirected to your ReturnUrl.

      1 Return page when the redirection status is a success

    iDEAL 2.0 Payment Flow – Mobile version

    1. The list of banks is displayed.

      1 Bank selection

    2. The customer selects the bank from the page.

      1 Bank selection

    3. The customer confirms the transaction by clicking on the Success button.

      1 Transaction confirmation

    4. Upon completion of the payment flow, the customer is redirected to Success ReturnUrl.

      1 Return page when the redirection status is a success

    CashApp

    To successfully test the CashApp payment method, you need to have a smartphone with a valid QR code reader that allows for completion of a Web based flow. If you are sending a mobile request for testing purposes, the provided mobile playground will only ask for approval or denial of the payment initiation without the need of using such a device. The payment method supports either direct capture or an authorization-capture flow; this applies to both Web or Mobile initiated payments.

    Note that requests are subjected to amount limits checks.

    CashApp Payment Flow

    In order to initiate a payment, the customer must provide the below mandatory details: Amount, Currency and Country.

    CashApp Web Payment Flow

    The client is redirected to the payment page where they are presented with a QR code that must be scanned using the smartphone QR camera reader.

    1 Enter name

    After scanning the QR code, a new payment menu page will pop-up on the smartphone, providing 2 payment actions: Approve or Decline. If the client chooses to press Approve, the transaction is considered to be either Authorized or Success, depending on the settings made to the payment flow.

    • After which they are redirected to the Success ReturnURL.

      1 Return page when the redirection status is a success

    If the client presses Decline, the transaction is Cancelled and has it’s status updated to Cancel.

    1 Enter name

    After which they are redirected to the Cancel ReturnURL.

    1 Return page when the redirection status is a success

    CashApp Web Payment Flow

    Similar to the first flow, the client is redirected to the payment page, however, they are directly presented with the Approve or Decline options. The actions that can be taken by the client are the same as the aforementioned Web flow.

    1 Enter name

    For both Web and Mobile flow, full and single partial Captures are supported; no multiple partial Captures are allowed by the provider.

    Zalo Pay Test Data

    In order for you to test Zalo Pay payment method successfully, it is necessary to have the Zalo Pay application installed on your phone and use the below test data to log in to the application and confirm payments. Be sure to use amount greater than 10000 VND.

    Zalo Pay Test Data
    Data Value
    Account 0909700980
    Password 111 111
    OTP 111 111

    Zalo Pay Payment Flow

    1. The Customer enters his email address.
      1 Enter email
    2. The Customer is redirected to Zalo Pay payment page.
      1 Zalo Pay payment page
    3. The Customer opens Zalo Pay mobile application and scans the QR code.
      1 QR code scanning
    4. The payment details are displayed and the customer confirms by using the payment password.
      1 Payment confirmation
    5. The payment is confirmed.
      1 Payment successful
    6. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.
      1 Return page when the redirection status is Processing

    NaverPay Test Data

    In order for you to test NaverPay payment method successfully, you don’t need any given test data.

    NaverPay Payment Flow

    1. The customer is redirected to the payment page where he enters his email address.

      1 Enter email

    2. The customer is redirected to the provider’s page where he must select the “Pay with” option .

      1 Pay with

    3. The customer will be redirected to the payment page where he has to choose either of the presented options: Deposit for successful transaction completion and Cancellation for cancelled transaction.

      1 Payment options

    4. Upon completion of the payment flow, the customer is redirected to your ReturnUrl.

      1 Return page when the redirection status is Processing

    KakaoPay Test Data

    In order for you to test KakaoPay payment method successfully, you don’t need any given test data.

    KakaoPay Payment Flow

    1. The customer will be redirected to the payment page where he enters his email address.

      1 Enter email

    2. The customer will be redirected to the payment page where he has to choose either of the presented options: Deposit for successful transaction completion and Cancellation for cancelled transaction.

      1 Payment options

    3. Upon completion of the payment flow, the customer is redirected to your ReturnUrl.

      1 Return page when the redirection status is Processing

    CreditCards Test Data

    In order for you to test the CreditCards payment method successfully, please use the below test data.

    CreditCards Test Data
    Data Value
    Credit Card Number: JCB: 3530111333300000
    American Express: 378282246310005
    VISA: 4111111111111111
    Master Card: 5555555555554444
    Diners Club: 30569309025904
    Expiration Period: Choose a month and a year at least equal than the current month and year
    Birth Date: Enter any 6 digit number. Example: 120456
    First 2 Digits Of The Card Password: Enter any 2 digit number. Example: 12

    CreditCards Payment Flow

    1. The Customer enters his email address.

      1 Enter email

    2. The Customer enters the credit card information. In order to complete the payment he must fill the form with a valid credit card number, expiration period, his birth date and the first 2 digits of the card password. For test purposes, please provide one of the test credit card numbers given above.

      1 Payment details

    3. Upon completion of the payment flow, the customer is redirected to your ReturnUrl.

      1 Return page when the redirection status is Processing

    Toss Test Data

    In order for you to test the Toss payment method successfully, please use the below test data.

    Toss Test Data
    Data Value
    Phone Number: Enter valid phone number. Example: 0702623250
    Birth Date: Enter any 6 digit number. Example: 120456

    Toss Payment Flow

    1. The Customer enters his email address.

      1 Enter email

    2. The Customer must provide his phone number and birth date to complete the payment.

      1 Payment details

    3. The customer is redirected to the provider’s page where he sees the amount of payment and further instruction for completing the purchase.

      1 Payment instructions

    4. Upon completion of the payment flow, the customer is redirected to your ReturnUrl.

      1 Return page when the redirection status is Processing

    Bizum Test Data

    In order for you to test Bizum payment method successfully, you need to add for phone number – 700000000. Also, be sure to use amount lower than 15.00 EUR .

    Bizum Payment Flow

    1. The customer will be redirected to the payment page where he enters his name, email address and phone number.

      1 Enter name, email and phone

    2. The customer needs to confirm the phone number in order to complete the payment.

      1 Payment details

    3. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    GiroPay Test Data


    Testing details  for merchant integration using Giropay are not available

    GiroPay Payment Flow

    1. The Customer selects his bank from the list – TestBank.
    2. 1 Bank selection

    3. The Customer selects his bank account – PSD2 Testbank.
    4. 1 Bank selection

    5. The Customer agrees with he conditions and terms.
    6. 1 Bank selection

    7. The customer verifies the payment info: Details, Name, IBAN, BIC, .
    8. 1 Bank selection

    9. Upon completion of the payment flow, the customer is redirected back to SuccessURL.
    10. 1 Bank selection

    Clearpay Test data

    To successfully test the Clearpay payment method, an active account must be registered with the provider, containing a valid email address.
    Note that requests are subjected to amount limits checks.
    The payment method supports either direct capture or an authorization-capture flow.

    Clearpay Payment Flow

      1. In order to initiate a payment, the customer must provide the below mandatory details: First and last name, Email, Phone, Billing Address (street, city, zip code, state, country) and then press Continue.

         

      2. The client is then redirected to the provider payment page where they are presented with the payment schedule.

        1 Enter name

        Here, they can press on the Payment Method tab and add a new card that will be saved for future purchases.

        1 Enter name

        If testing for payment completion, please insert the below card and CVV:
        Card Number: 4242 4242 4242 4242;
        Expiry date: must be in the future;
        CVV: 123;

        Once done, the Confirm button must be pressed.

        1 Enter name

         

      3. Upon completion of the payment flow, the customer is shown the provider’s processing page.

        1 Provider processing page

        After which they are redirected to your ReturnURL.

        1 Return page when the redirection status is a success

    Depending on your Capture settings, after the client finished all the necessary steps, the payment can have its status set to either Success (with the automatic capture option enabled) or Authorized. If the later status is shown for a particular transaction, a Capture time frame is active for 13 days. If this time period expires, the payment is automatically cancelled and refunded by the provider and no further Capture action can be performed on that particular Authorization order.

     

    Afterpay Test data

    To successfully test the Afterpay payment method, an active account must be registered with the provider: it must have a valid email address and its usage is limited to one country.
    Note that requests are subjected to amount limits checks.
    The payment method supports either direct capture or an authorization-capture flow.

    Afterpay Payment Flow

      1. In order to initiate a payment, the customer must provide the below mandatory details:
        First and last name, Email, Phone, Billing Address (street, city, zip code, state, country) and then press Continue.
        If no client details are sent, our intermediary page is displayed, in order to collect the necessary data:

        1 Enter name

      2. The client is then redirected to the payment page where they are presented with the payment schedule.

        1 Enter name

        Here, they can press on the Payment Method tab and add a new card that will be saved for future purchases.

        1 Enter name

        If testing for payment completion, please insert the below card and CVV(s):
        Card Number: 4111 1111 1111 1111;
        Expiry date: must be in the future;
        CVV: 000 for an approved capture;
        CVV: 051 for a declined capture.

        Once done, the Confirm button must be pressed.

        1 Enter name

      3. Upon completion of the payment flow, the customer is shown the provider’s processing page.

        1 Provider processing page

        After which they are redirected to your ReturnURL.

        1 Return page when the redirection status is a success

    Depending on your Capture settings, after the client finished all the necessary steps, the payment can have its status set to either Success (with the automatic capture option enabled) or Authorized. If the later status is shown for a particular transaction, a Capture time frame is active for 13 days. If this time period expires, the payment is automatically cancelled and refunded by the provider and no further Capture action can be performed on that particular Authorization order.

    NetBanking Test Data

    In order for you to test NetBanking payment method successfully, you don’t need any given test data. Note, however, that requests are subjected to amount limits checks.

    NetBanking Payment Flow

    1. In order to initiate a payment, the customer must insert the below mandatory details:
      First and last name, Email, Phone, Address (street, city, zip code, state) and then press Continue.

      1 Enter name

    2. The customer will be redirected to the payment page where he has to choose either of the presented options: Approve for successful transaction completion; Decline in order to reject the payment and Cancel for transaction cancellation .

      1 Enter name

    3. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    UPI Test data

    In order for you to test UPI payment method successfully, you don’t need any given test data. Note, however, that requests are subjected to amount limits checks.

    UPI Payment Flow

    1. In order to initiate a payment, the customer must insert the below mandatory details:
      First and last name, Email, Phone, Address (street, city, zip code, state) and then press Continue.

      1 Enter name

    2. The customer will be redirected to the payment page where he has to choose either of the presented options: Approve for successful transaction completion; Decline in order to reject the payment and Cancel for transaction cancellation .

      1 Enter name

    3. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    SSPAY Test Data

    In order for you to test SSPAY payment method successfully, you don’t need any given test data. Be sure to use amount greater than 100 KRW.

    SSPAY Payment Flow

    1. The customer will be redirected to the payment page where he enters his name, email address and phone number.

      1 Enter name, email and phone

    2. The customer receives a QR Code to use in order to complete the payment.

      1 Payment details

    3. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    SSGPAY Test Data

    In order for you to test SSGPAY payment method successfully, you don’t need any given test data. Be sure to use amount greater than 100 KRW.

    SSGPAY Payment Flow

    1. The customer will be redirected to the payment page where he enters his name, email address and phone number.

      1 Enter name, email and phone

    2. The customer is redirected to a page where he enters the necessary payment details in order to complete the payment.
    3. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    KAKAO Test Data

    In order for you to test KAKAO payment method successfully, you don’t need any given test data. Be sure to use amount greater than 100 KRW.

    KAKAO Payment Flow

    1. The customer will be redirected to the payment page where he enters his name, email address and phone number.

      1 Enter name, email and phone

    2. The customer receives a QR Code to use in order to complete the payment.

      1 Qr code

    3. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    Bank Transfer Test Data

    In order for you to test Bank Transfer payment method successfully, you don’t need any given test data.

    Bank Transfer Payment Flow

    1. The customer will be redirected to the payment page where he enters his name and email address.

      1 Enter name

    2. The customer receives the details to make the payment of the transaction. He also has the possibility to print the payment details.

      1 Payment details

    3. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    Bank Transfer Test Data

    In order for you to test Bank Transfer payment method successfully, you don’t need any given test data.

    Bank Transfer Payment Flow

    1. The customer will be redirected to the payment page where he enters his name and email address.

      1 Enter name

    2. The customer receives the details to make the payment of the transaction. He also has the possibility to print the payment details.

      1 Payment details

    3. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    Nequi Test Data

    In order for you to test Nequi payment method successfully, please use the test data provided below.

    Nequi Payment Flow

    Nequi Test Data
    Data Value
    Email Address: Enter any valid email address. Example: youre@email.com
    Phone Number: Enter any 7 digit number following the prefix +507. Example: 8339956
    1. The customer enters his email address and phone number and clicks on the Push or Scan QR button.

      1 Select payment option

    2. The customer is redirected to Nequi page where he scans the QR code given on the page and completes the payment.

      1 Payment code and details

    PagoCash Test Data

    In order for you to test PagoCash payment method successfully, please use the test data provided.

    Pagocash Payment Flow

    PagoCash Test Data
    Data Value
    Email Address: Enter any valid email address. Example: youre@email.com
    Phone Number: Enter any 7 digit number following the prefix +507. Example: 8339956
    1. The customer enters his email address and phone number and clicks on the Generate payment code button.

      1 Select payment option

    2. The customer is redirected to Pagocash page where he sees the reference number and the amount he has to pay. With the reference number received, the customer has 24 hours to complete the payment at any Punto Pago Kiosk by selecting Easy pay and entering the code.

      1 Payment code and details

    3. Upon completion of the payment flow the customer is redirected back to your ReturnURL.1 Return page when the redirection status is processing

    Nuvei Mobile SDK with 3DSecure Authentication

    There are two phases, which replicate the web flow:
    PHASE 1 – Check credit card – GenerateCreditCardToken in Mobile SDK;
    PHASE 2 – Use CardToken obtained in PHASE 1, authenticate the customer and initiate the Authorization.

    • PHASE 1 – GOAL: Tokenize credit card using mobile app – without 3DSecure and CreditCardToken generated only on Nuvei side (no acquirer token generated):

    1. MerchantAPP – Request Temporary ApiKey from MerchantServer
    2. MerchantServer – AUTH_MOBILE – Request TemporaryApiKey from Smart2PayServer, using SiteID:ApiKey authentication
    3. Smart2PayServer – Response with TemporaryApiKey to MerchantServer
    4. MerchantServer – Response with TemporaryApiKey to MerchantAPP
    5. MerchantAPP – Request to tokenize CardDetails to Smart2PayMobileSDK, using TemporaryApiKey(SDK::TOKENIZE)
    6. Smart2PayMobileSDK – Request to tokenize using TemporaryApiKey to Smart2PayServer
    7. Smart2PayServer – Response to Smart2PayMobileSDK with CardToken
    8. Smart2PayMobileSDK – Response to MerchantAPP with CardToken
    9. MerchantAPP – Save CardToken to MerchantServer; MerchantServer must store the following values: CreditCardToken + CardScheme + Last four digits of PAN + IssuingBankCountry + CustomerID
    • PHASE 2 – GOAL: Authorize a payment using a stored card token + 3DSecure authentication using mobile APP :

    1. MerchantAPP – Request TemporaryApiKey and CardToken from MerchantServer
    2. MerchantServer – AUTH_MOBILE – Request TemporaryApiKey from Smart2PayServer, using SiteID:ApiKey authentication
    3. Smart2PayServer – Response with TemporaryApiKey to MerchantServer
    4. MerchantServer responds with TemporaryApiKey to MerchantAPP:
      • the response must include also CreditCardToken + CardScheme + Last four digits of PAN for the CustomerID (values stored in PHASE 1, step 9);
    5. MerchantAPP displays CardScheme + Last four digits of PAN to the Customer requests CVV
    6. MerchantAPP uses SDK::3DSecureAuthenticate to request authentication to Smart2PayMobileSDK. Request must contain:
      • CardToken + CVV + TemporaryApiKey
      • Currency – required for step 9
      • Amount – required for step 9
    7. Smart2PayMobileSDK request to Smart2PayServer to obtain CardDetails
    8. Smart2PayServer responds to Smart2PayMobileSDK with CardDetails:
      • CardNumber, CardHolderName, ExpirationDate (NO CVV)
    9. Smart2PayMobileSDK request via AcquirerMobileSDK for 3DSecureAuthentication. Parameters required:
      • CardDetails:
        • CardNumber (required)
        • CardHolderName (required)
        • ExpirationDate (required)
        • CVV (required)
      • Authenticate3DInput:
        • SessionToken – (required)
        • Acquirer MerchantID (required)
        • Acquirer MerchantSiteID (required)
        • Currency – (required)
        • Amount – (required)
        • Acquirer PaymentOption – (required)
        • ClientRequestID – (optional)
        • CustomData – (optional)
      1. Smart2PayMobileSDK requests to Smart2PayServer to obtain Acquirer SessionToken. Parameters required:
        • Acquirer MerchantID, Acquirer MerchantSiteID, ClientRequestID, TimeStamp, Checksum
      2. Smart2PayServer responds to Smart2PayMobileSDK with SessionToken
      3. AcquirerMobileSDK displays a webview to the customer for the 3DSecureAuthentication
      4. Customer enters 3DSecure secret for authentication (OTP, password etc.)
      5. AcquirerMobileSDK responds to Smart2PayMobileSDK with 3DSecure Authentication result
    10. Smart2PayMobileSDK responds to MerchantAPP with 3DSecureAuthentication result. Parameters provided:
      • ECI
      • CAVV
      • XID
      • dsTransID
      • Result
      • errorCode
      • errorDescription
    11. MerchantAPP sends a request to MerchantServer for a liability shift 3DSecure payment (Authorization):
      • CardToken
      • CVV
      • 3DSecureAuthentication result
      • Splits
    12. MerchantServer sends request to Smart2PayServer for a liability shift 3DSecure payment (Authorization):
      • CardToken
      • CVV
      • 3DSecureAuthentication result
      • Splits
    13. Smart2PayServer sends response to MerchantServer with the result of the Authorization
    14. MerchantServer sends result to MerchantAPP which displays result to Customer

    Open Banking Test Data

    In order for you to test the Open Banking payment method successfully, please use the test data provided. Please send in request any amount ending in xxx.30 and currency GBP in order to successfully perform an end to end test.

    Open Banking Payment Flow

    Open Banking Test Data
    Data Value
    First Name: Enter any name. Example: John
    Last Name: Enter any name. Example: Doe
    Email Address: Enter any valid email address. Example: person@test.com
    Test Bank: Nuapay ASPSP
    Street: Enter any value. Example: Rue. Mandatory parameter only for France.
    Street number: Enter any value. Example: 12. Mandatory parameter only for France.
    Zip-code: Enter any value. Example: 123456. Mandatory parameter only for France.
    City: Enter any value. Example: Paris. Mandatory parameter only for France.
    User Name: psu
    Password: psu
    1. The customer enters his email address, name and chooses his bank from the provided list.

      1 Enter payment details

    2. The customer logs in to his Bank by entering his user name and password.

      1 Login to Bank

    3. The customer needs to prove his identity (Strong Customer Authentication).

      1 Strong Customer Authentication

    4. The customer selects his account from the provided list and completes the payment.

      1 Bank account

    5. Upon completion of the payment flow, the customer is redirected to your ReturnUrl.

      1 Return page when the redirection status is pending

    Nuvei JS – SDK Installation

    Several JavaScript API implementations are available here https://github.com/Smart2Pay/js-sdk/tree/main/src to obtain the CreditCardToken. You can also checkout our implementation examples here: https://github.com/Smart2Pay/js-sdk/blob/main/src/example.html. See below the details for ES6 – fetch + Promise, ES6 – Promise + XMLHttpRequest or ES5 – XMLHttpRequest.

    ES6 – fetch + Promise

    Installation
    Import the following script that will make available tokenizeCard_fetch():

    <script src="https://..../tokenizeCard_fetch.js" type="text/javascript"></script>

    Usage

    Use tokenizeCard_fetch to send the required data and handle response / error:

    tokenizeCard_fetch({
        apiKey: '<apikey string>',
        environment: '<environment string>',
        cardDetails: '<cardDetails object>',
    })  
    .then(CreditCardToken => console.log(CreditCardToken)) // use received 'CreditCardToken'
    .catch(err => console.error(err)) // handle error
    Parameter Type Possible Values Description
    apiKey string API key previously obtained from S2P server
    environment string ‘DEV’
    ‘TEST’
    ‘LIVE’
    select the environment
    DEV
    http://localhost/v1/card/authenticate
    TEST
    https://securetest.smart2pay.com/v1/card/authenticate
    LIVE
    https://secure.smart2pay.com/v1/card/authenticate
    cardDetails JSON object check sample bellow card authentication details in JSON format

    Sample card details object:

    
    {
        "CardAuthentication": {
            "Customer": {
                "FirstName": "John",
                "LastName": "Doe",
                "Email": "testing2@test.com",
                "SocialSecurityNumber": "00003456789"
            },
            "BillingAddress": {
                "Country": "BR"
            },
            "Card": {
                "HolderName": "John Doe",
                "Number": "4111111111111111",
                "ExpirationMonth": "02",
                "ExpirationYear": "2029",
                "SecurityCode": "312"
            }
        }
    }

    ES6 – Promise + XMLHttpRequest

    Installation
    Import the following script that will make available tokenizeCard_fetch():

    <script src="https://..../tokenizeCard_promise.js" type="text/javascript"></script>

    Usage

    Use tokenizeCard_promise to send the required data and handle response / error:

    tokenizeCard_promise({
        apiKey: '<apikey string>',
        environment: '<environment string>',
        cardDetails: '<cardDetails object>',
    })
    .then(function (CreditCardToken) {
        // use received 'CreditCardToken'
        console.log(CreditCardToken);
    })
    .catch(function (err) {
        // handle error
        console.error(err.status, err.statusText);
    });
    
    Parameter Type Possible Values Description
    apiKey string API key previously obtained from S2P server
    environment string ‘DEV’
    ‘TEST’
    ‘LIVE’
    select the environment
    DEV
    http://localhost/v1/card/authenticate
    TEST
    https://securetest.smart2pay.com/v1/card/authenticate
    LIVE
    https://secure.smart2pay.com/v1/card/authenticate
    cardDetails JSON object check sample bellow card authentication details in JSON format

    Sample card details object:

    
    {
        "CardAuthentication": {
            "Customer": {
                "FirstName": "John",
                "LastName": "Doe",
                "Email": "testing2@test.com",
                "SocialSecurityNumber": "00003456789"
            },
            "BillingAddress": {
                "Country": "BR"
            },
            "Card": {
                "HolderName": "John Doe",
                "Number": "4111111111111111",
                "ExpirationMonth": "02",
                "ExpirationYear": "2029",
                "SecurityCode": "312"
            }
        }
    }

    ES5 – XMLHttpRequest

    Installation
    Import the following script that will make available tokenizeCard():

    <script src="https://..../tokenizeCard.js" type="text/javascript"></script>

    ES5 – Usage

    Create a function where you handle the received CreditCardToken:

    function handleRequest(CreditCardToken) {
        // use received 'CreditCardToken'
        console.log(CreditCardToken);
    }

    Create a function to handle any received errors:

    function handleError(HttpStatusCode, errorText) {
        // handle error
        console.error(HttpStatusCode, errorText);
    }

    Use tokenizeCard() to send the required data and handlers:

    tokenizeCard({
        apiKey: '<𝘢𝘱𝘪𝘬𝘦𝘺 𝘴𝘵𝘳𝘪𝘯𝘨>', 
        environment: '<𝘦𝘯𝘷𝘪𝘳𝘰𝘯𝘮𝘦𝘯𝘵 𝘴𝘵𝘳𝘪𝘯𝘨>',
        cardDetails: '<𝘤𝘢𝘳𝘥𝘋𝘦𝘵𝘢𝘪𝘭𝘴 𝘰𝘣𝘫𝘦𝘤𝘵>',
        handleRequest: '<𝘩𝘢𝘯𝘥𝘭𝘦𝘙𝘦𝘲𝘶𝘦𝘴𝘵 𝘤𝘢𝘭𝘭𝘣𝘢𝘤𝘬>',
        handleError: '<𝘩𝘢𝘯𝘥𝘭𝘦𝘌𝘳𝘳𝘰𝘳 𝘤𝘢𝘭𝘭𝘣𝘢𝘤𝘬>'
    });
    
    Parameter Type Possible Values Description
    apiKey string API key previously obtained from S2P server
    environment string ‘DEV’
    ‘TEST’
    ‘LIVE’
    select the environment
    DEV
    http://localhost/v1/card/authenticate
    TEST
    https://securetest.smart2pay.com/v1/card/authenticate
    LIVE
    https://secure.smart2pay.com/v1/card/authenticate
    cardDetails JSON object check sample bellow card authentication details in JSON format
    handleRequest callback function a Javascript function that will receive CreditCardToken as a parameter
    handleError callback function a Javascript function that will receive an error code: HttpStatusCode and errorText parameters

    Sample card details object:

    
    {
        "CardAuthentication": {
            "Customer": {
                "FirstName": "John",
                "LastName": "Doe",
                "Email": "testing2@test.com",
                "SocialSecurityNumber": "00003456789"
            },
            "BillingAddress": {
                "Country": "BR"
            },
            "Card": {
                "HolderName": "John Doe",
                "Number": "4111111111111111",
                "ExpirationMonth": "02",
                "ExpirationYear": "2029",
                "SecurityCode": "312"
            }
        }
    }

    Nuvei JS – SDK Instructions

    Nuvei JS – SDK is available here: https://github.com/Smart2Pay/js-sdk.

    The interaction flow is described next:

    1. Upon order initiation from the customer
    2. Your server asks our server for a temporary API Key at entry point api/authorization/apikey:

      Request:

      POST https://securetest.smart2pay.com/v1/authorization/apikey
      Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    3. Our server responds with a temporary API Key:

      Response:

      HTTP/1.1 201 Created
      Content-Type: application/json; charset=utf-8
      
      {
        "ApiKey": {
          "Value": "MzAwMDc6M2FkODVhYzctNjhlNS00MTA2LTliNjctNTg3MmM1ZmI2ZDNiLTYzMzA=",
          "Created": "20181206141407",
          "LifeTime": 30,
          "AccessCounterLimit": 10,
          "Status": {
            "ID": 2,
            "Info": "Success",
            "Reasons": []
          }
        }
      }
    4. The temporary API Key must be passed to the site.
    5. Collect from your site the credit card details from which you build a cardDetails object and pass it to our SDK together with the temporary API key obtained in the previous step. Any error will be available inside the promise’s catch method.
      tokenizeCard_fetch({
          apiKey: '<apikey string>',
          environment: '<environment string>',
          cardDetails: '<cardDetails object>',
      })
          .then(CreditCardToken => console.log(CreditCardToken))
          .catch(err => console.error(err))
      

    6. Our SDK sends these details to our server.
    7. The server responds with a token to our SDK.
    8. Our SDK makes the credit card token available inside the tokenizeCard_fetch promise’s response.
    9. The order can now be submitted from the site to your server together with the token.
    10. A credit card transaction using the token is now initiated from your server. For more details go to: Recurring Card Payments section. You can store the token on your server for subsequent purchases.
    11. Our server responds to your server with the Authorization result. Upon a successful result you can release the goods or services.
    12. You pass the payment result to your site.

    SDK is now fully functional in your app!

    Interac Instant Test Data

    See how Interac Instant works with the payment flows for Interac e-Transfer. In order for you to test the Interac Instant payment method successfully, please use the test data provided. You will need a Canada VPN connection in order to successfully perform an end to end test.

    Interac Instant – Interac e-Transfer Payment Flow

    Interac Instant Test Data – Interac e-Transfer Option
    Data Value
    First Name: Larry
    Last Name: Johnson
    Email Address: Enter any valid email address. Example: person@test.com
    Phone Number: Enter any 10 digit number. Example: 0745123456
    1. The customer enters his email address, name and phone number.

      1 Select payment option

    2. The customer is redirected to the Interac Instant app where he chooses his Bank.

      1 Select payment option

    3. The customer chooses to pay via Interac e-Transfer.

      1 Card details

    4. The customer is redirected to the payment info page where he can see all the information needed to make an Interac e-Transfer deposit. The customer needs to go to his bank’s mobile app or website to complete the transfer.

      1 PIN Number

    Pay With Crypto Payment Flow – Production user experience EUR – BTC

    To see how it works on Production environment please checkout the following payment flow from EUR to BTC.

    Pay With Crypto Payment Flow

    1. Make a REST request using the below parameters:
      Customer Email is a required parameter (if sent in the initial request, a step in the flow will be skipped, as this parameter can also be collected on our side).

      Request:

      POST https://pay.smart2pay.com/v1/payments
      
      {
        "Payment": {
          "MerchantTransactionID": "cdrest312",
          "Amount": 3000,
          "Currency": "EUR",
          "MethodID": "97",
          "Description": "Pay with Crypto Test payment",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php", 
          "TokenLifetime": 10,
          "Customer": {
            "Email": "john@test.com"
           },
          "BillingAddress": {
            "Country": "DE"
            }
          }
        }
      

      Response:

      HTTP/1.1 201 Created
      Content-Type: application/json; charset=utf-8
      
      {
          "Payment": {
              "ID": 455100364,
              "SkinID": null,
              "ClientIP": null,
              "Created": "20210402080607",
              "MerchantTransactionID": "cdrest312",
              "OriginatorTransactionID": null,
              "Amount": "3000",
              "Currency": "EUR",
              "CapturedAmount": null,
              "ReturnURL": "http://demo.smart2pay.com/redirect.php",
              "Description": " Pay with Crypto Test payment",
              "MethodID": 97,
              "MethodOptionID": null,
              "IncludeMethodIDs": null,
              "ExcludeMethodIDs": null,
              "PrioritizeMethodIDs": null,
              "SiteID": 30025,
              "NotificationDateTime": null,
              "Customer": {
                  "MerchantCustomerID": null,
                  "Email": null,
                  "FirstName": null,
                  "LastName": null,
                  "Gender": null,
                  "SocialSecurityNumber": null,
                  "Phone": null,
                  "Company": null,
                  "DateOfBirth": null
              },
              "BillingAddress": {
                  "City": null,
                  "ZipCode": null,
                  "State": null,
                  "Street": null,
                  "StreetNumber": null,
                  "HouseNumber": null,
                  "HouseExtension": null,
                  "Country": "DE"
              },
              "ShippingAddress": null,
              "Articles": null,
              "Details": null,
              "ReferenceDetails": null,
              "CustomParameters": null,
              "PreapprovalID": null,
              "Status": {
                  "ID": 1,
                  "Info": "Open",
                  "Reasons": null
              },
              "Fraud": null,
              "MethodTransactionID": null,
              "TokenLifetime": 10,
              "Capture": null,
              "PreapprovalDetails": null,
              "RedirectURL": "https://globalapi.smart2pay.com/Home?PaymentToken=AC38A391BBCA8A3B594B144D92115BB5.455100364",
              "Splits": null
          }
      }
      
    2. The user is redirected to the Crypto processor page where they are prompted to choose the cryptocurrency in which the payment will be made1 Payment details
    3. After choosing the crypto currency, the customer can complete the payment by using the QR Code or by copying the crypto address and the exact amount displayed on page. The user has 3 hours to complete the payment.1 Account login
    4. The user goes to his crypto wallet to complete the payment by clicking on the Send button (from Send&Receive section). In this section it is required to add the crypto address that he previously saved and the Amount in BTC.
      1 Account login
    5. The user validates the transaction via a link sent to their linked email address of the Crypto Account (this might apply only to some Crypto Accounts).

      1 Account login

      1 Account login

    6. The user confirms the BTC transfer.

      1 Account login

      1 Account login

    7. The customer is redirected to a payment processing message page.
      1 Account login
    8. At the same time, as soon as the payment is completed the user receives this in their Crypto Wallet.
      1 Account login
    9. Upon completion of the payment flow, the customer is redirected to the Merchant Redirect URL (Merchant Website).
      1 Account login
    10. We will notify you about the new status of the payout to the Notification URL you setup in the Merchant Dashboard. The format of the received notification has the same structure as the response of the initial request.

      You need to respond with HTTP code 204 (No Content)!

      Payment notification format:

      Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
      
      {
        "Payment": {
          "ID": 455100364,
          "SkinID": null,
          "ClientIP": null,
          "Created": "20210402080607",
          "MerchantTransactionID": "cdrest312",
          "OriginatorTransactionID": null,
          "Amount": "3000",
          "Currency": "EUR",
          "CapturedAmount": null,
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "Description": " Pay with Crypto Test payment",
          "MethodID": 97,
          "MethodOptionID": null,
          "IncludeMethodIDs": null,
          "ExcludeMethodIDs": null,
          "PrioritizeMethodIDs": null,
          "SiteID": 30025,
          "NotificationDateTime": null,
          "Customer": null,
          "BillingAddress": null,
          "ShippingAddress": null,
          "Articles": null,
          "Details": null,
          "ReferenceDetails": null,
          "CustomParameters": null,
          "PreapprovalID": null,
          "Status": {
            "ID": 2,
            "Info": "Success",
            "Reasons": null
          },
          "Fraud": null,
          "MethodTransactionID": null,
          "TokenLifetime": 10,
          "Capture": null,
          "PreapprovalDetails": null,
          "RedirectURL": "https://globalapi.smart2pay.com/Home?PaymentToken=AC38A391BBCA8A3B594B144D92115BB5.455100364",
          "Splits": null
        }
      }
      

      Response:

      204 No Content

    Clave Test Data

    In order for you to test Clave payment method successfully, please use the test data provided. You will need a Panama VPN connection in order to successfully perform an end to end test.

    Clave Payment Flow

    Clave Test Data
    Data Value
    Email Address: Enter any valid email address. Example: youre@email.com
    Phone Number: Enter any 7 digit number following the prefix +507. Example: 8339956
    Card Number: 5038460000000019
    Security Code ((CVV2, CVC2): 475
    Expiration Date: 04-21
    PIN Number: 1234
    1. The customer enters his email address and phone number and clicks on the Generate payment button.

      1 Select payment option

    2. The customer is redirected to Clave option page where he needs to register his credit card and customer details by entering the correct information for: Card Number, CVV, Expiration Date, PIN number, Last Name, First Name, Phone Number and Email Address. He continues the payment by clicking on the Accept button.

      1 Card details

    3. The customer enters his PIN Number and clicks on the Confirm button.

      1 PIN Number

    4. The customer clicks on the Verify PIN button.

      1 Verify PIN

    5. The customer is redirected to the confirmation page where he sees the payment details and clicks on the Confirm button.

      1 confirmation page

      1 Processing

    6. Upon completion of the payment flow the customer is redirected back to your ReturnURL.1 Return page when the redirection status is a success

    Pay With Crypto Test Data

    For Pay With Crypto payment method there aren’t any test data available, but you can see how it works on the TEST environment with the payment flow given below. To see how it works on Production environment please checkout the following link: Production Payment Flow.

    Pay With Crypto Payment Flow

    1. The customer enters his email address.1 Customer details
    2. The customer is redirected to the Pay With Crypto page where they are prompted to choose the cryptocurrency in which the payment will be made. For testing purposes, please choose Ethereum.1 Payment details
    3. After choosing the crypto currency, the customer can complete the payment by using the QR Code or by copying the crypto address and the exact amount displayed on page.1 Account login
    4. The customer goes to his crypto wallet to complete the payment by clicking on the Send button.1 Account login
    5. The customer adds the crypto address that he previously saved.1 Account login
    6. The customer adds the exact amount in the Amount field and clicks on the Next button.1 Account login
    7. The customer sees the payment details, including the amount and currency and confirms the payment.1 Account login
    8. The customer is redirected to a payment processing message page.1 Account login
    9. The customer is redirected to a payment confirmation page.1 Account login
    10. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.1 Return page when the redirection status is Success

    Pay4Me Malaysia Test Data

    For Pay4Me Malaysia payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Pay4Me Malaysia Payment Flow

    1. The customer enters his email address, name and phone number.1 Customer details
    2. The customer is shown the details of his payment and proceeds to pay with Pay4Me Malaysia by entering the payer email and contact number.1 Payment details
    3. The customer sees the payment details and the information regarding the completion of the payment.1 Account login
    4. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.1 Return page when the redirection status is Processing

    Payouts Balances

    Access the Payouts Balances tab in order to see and verify your payouts balances. Here you will find a complete list of all of your payouts balances. You have the possibility to search for a specific payout balance using different search filters.

    32

    Search filters

    When you access the Payouts Balances tab, the Search Filters section is expanded. In order to collapse it just click the arrow on the right of the screen.

    You can search payouts by Method, Currency and Site Alias.

    32

    Momo Test Data

    In order for you to test the Momo payment method successfully, please use the below test data. You can also see how it works with the payment flows given below for Desktop and for Mobile devices. For testing purposes, you need to have installed the Momo application on your mobile device.

    Momo Test Data
    Data Value
    Phone Number: 01228038440
    Verification code: 000000
    Payment password: 000000

    Momo Desktop Payment Flow

    1. The customer enters his email address.

      1 Enter email

    2. The customer is redirected to the Momo payment page where he scans the QR Code using the Momo application already installed on his mobile phone. He has 10 minutes in order to successfully scan the QR Code.

      1 QR Code page

    3. After the customer confirms the payment via his mobile phone application, the payment is successful and the user is redirected to the Momo payment confirmation page.

      1 Payment confirmation page.

    4. Upon completion of the payment flow, the customer is redirected to your ReturnUrl.

      1 Return page when the redirection status is a success

    Momo Mobile Payment Flow

    1. The customer enters his email address.

      1 Enter email

    2. The customer is redirected to the Momo application already installed on his mobile phone where he logs into the Momo application using his phone number.

      1 Momo application

    3. The customer enters the verification code received via his mobile phone.

      1 Verification code

    4. The customer logs into Momo application by entering his password.

      1 Account password

    5. The customer is redirected to the payment details form where he confirms the payment by clicking on the Confirm button.

       1=

    6. The customer enters his account password in order to complete the payment.

      1 Payment confirmation page

    7. Upon completion of the payment flow, the customer is redirected to your ReturnUrl.

      1 Return page when the redirection status is a success

    AlipayHK Recurring Payment

    Definition: POST /v1/payments/recurrent

    A recurring payment is created in the same manner a one-off payment is created. In addition, you need to send the PreapprovalID (the PreapprovalID received when you created/opened a preapproval) and the information specific to each payment method.

    For AlipayHK (1145), you need to send the PreapprovalID (the PreapprovalID received when you created/opened a preapproval) and the Amount to be captured.

    Checkout the below example of a recurring payment request for AlipayHK (1145) that is based on the PreapprovalID. Please send in the payment request the Description parameter and Country parameter that should be the same with the one sent in the Preapproval request.

    Request:

    POST https://paytest.smart2pay.com/v1/payments/recurrent
    Authorization: Basic MzAyMDE6KzlLZUd6S0Y3VzhTLzc5YTVSMzNZSlVnN0U3V0ZOY1piakdmekxWM2JYU25GQ095RnQ=
    
    {
      "Payment": {
        "PreapprovalID": 28082,
        "MerchantTransactionID": "s2ptest_alipayhk2",
        "Amount": 100,
        "Currency": "HKD",
        "MethodID": 1145,
        "Description": "Recurring payment",
        "BillingAddress": {
        "Country": "HK"
        } 
      }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Payment": {
            "ID": 5879765,
            "SkinID": null,
            "ClientIP": null,
            "Created": "20210202171203",
            "MerchantTransactionID": "s2ptest_alipayhk2",
            "OriginatorTransactionID": null,
            "Amount": "100",
            "Currency": "HKD",
            "CapturedAmount": null,
            "ReturnURL": null,
            "Description": "Recurring payment",
            "MethodID": 1145,
            "MethodOptionID": null,
            "IncludeMethodIDs": null,
            "ExcludeMethodIDs": null,
            "PrioritizeMethodIDs": null,
            "SiteID": 30201,
            "NotificationDateTime": null,
            "Customer": null,
            "BillingAddress": {
                "ID": 986,
                "City": null,
                "ZipCode": null,
                "State": null,
                "Street": null,
                "StreetNumber": null,
                "HouseNumber": null,
                "HouseExtension": null,
                "Country": "HK"
            },
            "ShippingAddress": null,
            "Articles": null,
            "Details": null,
            "ReferenceDetails": null,
            "CustomParameters": null,
            "PreapprovalID": 28082,
            "Status": {
                "ID": 1,
                "Info": "Open",
                "Reasons": null
            },
            "Fraud": null,
            "MethodTransactionID": null,
            "TokenLifetime": null,
            "Capture": null,
            "PreapprovalDetails": null,
            "RedirectURL": null,
            "Splits": null
        }
    }

    We will notify you about the new status of the payment to the Notification URL you setup in the Merchant Dashboard. The format of the received notification has the same structure as the response of the initial request.

    You need to respond with HTTP code 204 (No Content)!

    Payment notification format:

    Authorization: Basic MzAyMDE6KzlLZUd6S0Y3VzhTLzc5YTVSMzNZSlVnN0U3V0ZOY1piakdmekxWM2JYU25GQ095RnQ=
    
    {
      "Payment": {
        "ID": 5879765,
        "SkinID": null,
        "ClientIP": null,
        "Created": "20210202171203",
        "MerchantTransactionID": "s2ptest_alipayhk2",
        "OriginatorTransactionID": null,
        "Amount": "100",
        "Currency": "HKD",
        "CapturedAmount": null,
        "ReturnURL": "",
        "Description": "Recurring payment",
        "MethodID": 1145,
        "MethodOptionID": null,
        "IncludeMethodIDs": null,
        "ExcludeMethodIDs": null,
        "PrioritizeMethodIDs": null,
        "SiteID": 30201,
        "NotificationDateTime": null,
        "Customer": null,
        "BillingAddress": {
          "ID": 986,
          "City": null,
          "ZipCode": null,
          "State": null,
          "Street": null,
          "StreetNumber": null,
          "HouseNumber": null,
          "HouseExtension": null,
          "Country": "HK"
        },
        "ShippingAddress": null,
        "Articles": null,
        "Details": null,
        "ReferenceDetails": null,
        "CustomParameters": null,
        "PreapprovalID": 28082,
        "Status": {
          "ID": 2,
          "Info": "Success",
          "Reasons": null
        },
        "Fraud": null,
        "MethodTransactionID": null,
        "TokenLifetime": null,
        "Capture": null,
        "PreapprovalDetails": null,
        "RedirectURL": null,
        "Splits": null
      }
    }

    AlipayHK Preapproval Notification

    We will notify you about the new status of the preapproval to the Notification URL you setup in the Merchant Dashboard. The format of the received notification has the same structure as the response of the initial request.

    You need to respond with HTTP code 204 (No Content)!

    Preapproval notification format:

    Authorization: Basic MzAyMDE6KzlLZUd6S0Y3VzhTLzc5YTVSMzNZSlVnN0U3V0ZOY1piakdmekxWM2JYU25GQ095RnQ=
    
    
    
    {
      "Preapproval": {
        "ID": 28082,
        "Created": "20210202165209",
        "MethodID": 1145,
        "SiteID": 30201,
        "MerchantPreapprovalID": "s2ptest_alipayhk1",
        "RecurringPeriod": null,
        "PreapprovedMaximumAmount": null,
        "Currency": null,
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "1 year subscription",
        "Customer": {
          "ID": 2625948,
          "MerchantCustomerID": null,
          "Email": "jdoe@gmail.com",
          "FirstName": "John",
          "LastName": "Doe",
          "Gender": null,
          "SocialSecurityNumber": null,
          "Phone": null,
          "Company": null,
          "DateOfBirth": null
        },
        "BillingAddress": {
          "ID": 986,
          "City": null,
          "ZipCode": null,
          "State": null,
          "Street": null,
          "StreetNumber": null,
          "HouseNumber": null,
          "HouseExtension": null,
          "Country": "HK"
        },
        "Status": {
          "ID": 2,
          "Info": null,
          "Reasons": null
        },
        "RedirectURL": null,
        "MethodOptionID": null,
        "PreapprovedFrequency": null,
        "MandateReference": null,
        "Details": null
      }
    }

    AlipayHK Preapproval Request

    Definition: POST /v1/preapprovals

    To initiate a preapproval, you must create a preapproval object. The parameters of the preapproval are sent in the message body as a JSON object. See below an example of a preapproval request for AlipayHK (1143).

    Request:

    POST https://paytest.smart2pay.com/v1/preapprovals
    Authorization: Basic MzAyMDE6KzlLZUd6S0Y3VzhTLzc5YTVSMzNZSlVnN0U3V0ZOY1piakdmekxWM2JYU25GQ095RnQ=
    
    {
     "Preapproval": {
       "MerchantPreapprovalID": "s2ptest_alipayhk1",
       "Currency": "HKD",
       "Description": "1 year subscription",
       "ReturnURL": "http://demo.smart2pay.com/redirect.php",
       "MethodID": 1145,
       "Customer": {
          "FirstName": "John",
          "LastName": "Doe",
          "Email": "jdoe@gmail.com"
         },
       "BillingAddress": {
          "Country": "HK"
          }
       }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Preapproval": {
            "ID": 28082,
            "Created": "20210202165209",
            "MethodID": 1145,
            "SiteID": 30201,
            "MerchantPreapprovalID": "s2ptest_alipayhk1",
            "RecurringPeriod": 0,
            "PreapprovedMaximumAmount": null,
            "Currency": "HKD",
            "ReturnURL": "http://demo.smart2pay.com/redirect.php",
            "Description": "1 year subscription",
            "Customer": {
                "ID": 2625948,
                "MerchantCustomerID": null,
                "Email": "jdoe@gmail.com",
                "FirstName": "John",
                "LastName": "Doe",
                "Gender": null,
                "SocialSecurityNumber": null,
                "Phone": null,
                "Company": null,
                "DateOfBirth": null
            },
            "BillingAddress": {
                "ID": 986,
                "City": null,
                "ZipCode": null,
                "State": null,
                "Street": null,
                "StreetNumber": null,
                "HouseNumber": null,
                "HouseExtension": null,
                "Country": "HK"
            },
            "Status": {
                "ID": 1,
                "Info": "Pending",
                "Reasons": null
            },
            "RedirectURL": "https://europaytest.smart2pay.com/AlipayOSP/Preapproval/PreapprovalLanding.aspx?ID=23265&Hash=030CBF27F3759B369266CCBC5D84C98A",
            "MethodOptionID": 0,
            "PreapprovedFrequency": null,
            "MandateReference": null,
            "Details": null
        }
    }

    AlipayHK Preapproval Flow

    AlipayHK Test Data
    Data Value
    Phone Number: Enter any 10 digit number. Example: 1234567812
    Verification code: Enter any 6 digit number. Example: 123456
    Payment password: Enter any 6 digit number. Example: 123456
    1. The customer is redirected to AlipayHK page. The customer needs to add their phone number attached to the AlipayHK wallet.
      1 Add phone number
    2. The customer enters the SMS verification code received via mobile phone.
      1 Verification Code
    3. The customer sees the preapproval details, agrees with the AlipayHK Terms and Conditions and confirms the auto-debit user agreement.
      1 Confirm agreement
    4. The customer enters the payment password. For testing purposes, enter any 6 digit number eg. 123456.
      1 Confirm agreement
    5. The customer is redirected to the AlipayHK confirmation page.
      1 Confirmation page
    6. Upon completion of the payment flow, the customer is redirected to your ReturnUrl.1 Return page when the redirection status is processing

    Touch’n Go eWallet Recurring Payment

    Definition: POST /v1/payments/recurrent

    A recurring payment is created in the same manner a one-off payment is created. In addition, you need to send the PreapprovalID (the PreapprovalID received when you created/opened a preapproval) and the information specific to each payment method.

    For Touch’n Go eWallet (1144), you need to send the PreapprovalID (the PreapprovalID received when you created/opened a preapproval) and the Amount to be captured.

    Checkout the below example of a recurring payment request for Touch’n Go eWallet (1144) that is based on the PreapprovalID. Please send in the payment request the Description parameter and Country parameter that should be the same with the ones sent in the Preapproval request.

    Request:

    POST https://paytest.smart2pay.com/v1/payments/recurrent
    Authorization: Basic MzAyMDE6KzlLZUd6S0Y3VzhTLzc5YTVSMzNZSlVnN0U3V0ZOY1piakdmekxWM2JYU25GQ095RnQ=
    
    {
      "Payment": {
        "PreapprovalID": 28080,
        "MerchantTransactionID": "s2ptest_tng2",
        "Amount": 100,
        "Currency": "MYR",
        "MethodID": 1144,
        "Description": "Recurring payment",
        "BillingAddress": {
        "Country": "MY"
        } 
      }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Payment": {
            "ID": 5879762,
            "SkinID": null,
            "ClientIP": null,
            "Created": "20210202162904",
            "MerchantTransactionID": "s2ptest_tng2",
            "OriginatorTransactionID": null,
            "Amount": "100",
            "Currency": "MYR",
            "CapturedAmount": null,
            "ReturnURL": null,
            "Description": "Recurring payment",
            "MethodID": 1144,
            "MethodOptionID": null,
            "IncludeMethodIDs": null,
            "ExcludeMethodIDs": null,
            "PrioritizeMethodIDs": null,
            "SiteID": 30201,
            "NotificationDateTime": null,
            "Customer": null,
            "BillingAddress": {
                "ID": 701,
                "City": null,
                "ZipCode": null,
                "State": null,
                "Street": null,
                "StreetNumber": null,
                "HouseNumber": null,
                "HouseExtension": null,
                "Country": "MY"
            },
            "ShippingAddress": null,
            "Articles": null,
            "Details": null,
            "ReferenceDetails": null,
            "CustomParameters": null,
            "PreapprovalID": 28080,
            "Status": {
                "ID": 1,
                "Info": "Open",
                "Reasons": null
            },
            "Fraud": null,
            "MethodTransactionID": null,
            "TokenLifetime": null,
            "Capture": null,
            "PreapprovalDetails": null,
            "RedirectURL": null,
            "Splits": null
        }
    }

    We will notify you about the new status of the payment to the Notification URL you setup in the Merchant Dashboard. The format of the received notification has the same structure as the response of the initial request.

    You need to respond with HTTP code 204 (No Content)!

    Payment notification format:

    Authorization: Basic MzAyMDE6KzlLZUd6S0Y3VzhTLzc5YTVSMzNZSlVnN0U3V0ZOY1piakdmekxWM2JYU25GQ095RnQ=
    
    {
      "Payment": {
        "ID": 5879762,
        "SkinID": null,
        "ClientIP": null,
        "Created": "20210202162904",
        "MerchantTransactionID": "s2ptest_tng2",
        "OriginatorTransactionID": null,
        "Amount": "100",
        "Currency": "MYR",
        "CapturedAmount": null,
        "ReturnURL": "",
        "Description": "Recurring payment",
        "MethodID": 1144,
        "MethodOptionID": null,
        "IncludeMethodIDs": null,
        "ExcludeMethodIDs": null,
        "PrioritizeMethodIDs": null,
        "SiteID": 30201,
        "NotificationDateTime": null,
        "Customer": null,
        "BillingAddress": {
          "ID": 701,
          "City": null,
          "ZipCode": null,
          "State": null,
          "Street": null,
          "StreetNumber": null,
          "HouseNumber": null,
          "HouseExtension": null,
          "Country": "MY"
        },
        "ShippingAddress": null,
        "Articles": null,
        "Details": null,
        "ReferenceDetails": null,
        "CustomParameters": null,
        "PreapprovalID": 28080,
        "Status": {
          "ID": 2,
          "Info": "Success",
          "Reasons": null
        },
        "Fraud": null,
        "MethodTransactionID": null,
        "TokenLifetime": null,
        "Capture": null,
        "PreapprovalDetails": null,
        "RedirectURL": null,
        "Splits": null
      }
    }

    Touch’n Go eWallet Preapproval Notification

    We will notify you about the new status of the preapproval to the Notification URL you setup in the Merchant Dashboard. The format of the received notification has the same structure as the response of the initial request.

    You need to respond with HTTP code 204 (No Content)!

    Preapproval notification format:

    Authorization: Basic MzAyMDE6KzlLZUd6S0Y3VzhTLzc5YTVSMzNZSlVnN0U3V0ZOY1piakdmekxWM2JYU25GQ095RnQ=
    
    
    
    {
      "Preapproval": {
        "ID": 28080,
        "Created": "20210202161103",
        "MethodID": 1144,
        "SiteID": 30201,
        "MerchantPreapprovalID": "s2ptest_tng1",
        "RecurringPeriod": null,
        "PreapprovedMaximumAmount": null,
        "Currency": null,
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "1 year subscription",
        "Customer": {
          "ID": 2625948,
          "MerchantCustomerID": null,
          "Email": "jdoe@gmail.com",
          "FirstName": "John",
          "LastName": "Doe",
          "Gender": null,
          "SocialSecurityNumber": null,
          "Phone": null,
          "Company": null,
          "DateOfBirth": null
        },
        "BillingAddress": {
          "ID": 701,
          "City": null,
          "ZipCode": null,
          "State": null,
          "Street": null,
          "StreetNumber": null,
          "HouseNumber": null,
          "HouseExtension": null,
          "Country": "MY"
        },
        "Status": {
          "ID": 2,
          "Info": null,
          "Reasons": null
        },
        "RedirectURL": null,
        "MethodOptionID": null,
        "PreapprovedFrequency": null,
        "MandateReference": null,
        "Details": null
      }
    }

    Touch’n Go eWallet Preapproval Request

    Definition: POST /v1/preapprovals

    To initiate a preapproval, you must create a preapproval object. The parameters of the preapproval are sent in the message body as a JSON object. See below an example of a preapproval request for Touch’n Go eWallet (1144).

    Request:

    POST https://paytest.smart2pay.com/v1/preapprovals
    Authorization: Basic MzAyMDE6KzlLZUd6S0Y3VzhTLzc5YTVSMzNZSlVnN0U3V0ZOY1piakdmekxWM2JYU25GQ095RnQ=
    
    {
     "Preapproval": {
       "MerchantPreapprovalID": "s2ptest_tng1",
       "Currency": "MYR",
       "Description": "1 year subscription",
       "ReturnURL": "http://demo.smart2pay.com/redirect.php",
       "MethodID": 1144,
       "Customer": {
          "FirstName": "John",
          "LastName": "Doe",
          "Email": "jdoe@gmail.com"
         },
       "BillingAddress": {
          "Country": "MY"
          }
       }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Preapproval": {
            "ID": 28080,
            "Created": "20210202161103",
            "MethodID": 1144,
            "SiteID": 30201,
            "MerchantPreapprovalID": "s2ptest_tng1",
            "RecurringPeriod": 0,
            "PreapprovedMaximumAmount": null,
            "Currency": "MYR",
            "ReturnURL": "http://demo.smart2pay.com/redirect.php",
            "Description": "1 year subscription",
            "Customer": {
                "ID": 2625948,
                "MerchantCustomerID": null,
                "Email": "jdoe@gmail.com",
                "FirstName": "John",
                "LastName": "Doe",
                "Gender": null,
                "SocialSecurityNumber": null,
                "Phone": null,
                "Company": null,
                "DateOfBirth": null
            },
            "BillingAddress": {
                "ID": 701,
                "City": null,
                "ZipCode": null,
                "State": null,
                "Street": null,
                "StreetNumber": null,
                "HouseNumber": null,
                "HouseExtension": null,
                "Country": "MY"
            },
            "Status": {
                "ID": 1,
                "Info": "Pending",
                "Reasons": null
            },
            "RedirectURL": "https://europaytest.smart2pay.com/AlipayOSP/Preapproval/PreapprovalLanding.aspx?ID=23263&Hash=DE44DA5FA939A8B396DDE346A66835D6",
            "MethodOptionID": 0,
            "PreapprovedFrequency": null,
            "MandateReference": null,
            "Details": null
        }
    }

    Touch’n Go eWallet Preapproval Flow

    Touch’n Go eWalle Test Data
    Data Value
    Phone Number: Enter any 10 digit number. Example: 1234567812
    PIN Number: Enter any 6 digit number. Example: 123456
    1. The customer is redirected to Touch’n Go page. The customer needs to add their phone number attached to the Touch’n wallet and the 6 digit PIN. For testing purposes, please enter any 6 digit number eg. 123456.
      1 Add phone number
    2. The customer confirms the auto-debit user agreement.
      1 Confirm agreement
    3. The customer is redirected to the Touch’n Go confirmation page.
      1 Add phone number
    4. Upon completion of the payment flow, the customer is redirected to your ReturnUrl.1 Return page when the redirection status is processing

    Truemoney Recurring Payment

    Definition: POST /v1/payments/recurrent

    A recurring payment is created in the same manner a one-off payment is created. In addition, you need to send the PreapprovalID (the PreapprovalID received when you created/opened a preapproval) and the information specific to each payment method.

    For Truemoney (1143), you need to send the PreapprovalID (the PreapprovalID received when you created/opened a preapproval) and the Amount to be captured.

    Checkout the below example of a recurring payment request for Truemoney (1143) that is based on the PreapprovalID. Please send in the payment request the Description parameter and Country parameter that should be the same with the ones sent in the Preapproval request.

    Request:

    POST https://paytest.smart2pay.com/v1/payments/recurrent
    Authorization: Basic MzAyMDE6KzlLZUd6S0Y3VzhTLzc5YTVSMzNZSlVnN0U3V0ZOY1piakdmekxWM2JYU25GQ095RnQ=
    
    {
      "Payment": {
        "PreapprovalID": 28076,
        "MerchantTransactionID": "s2ptest_truemoney1",
        "Amount": 100,
        "Currency": "THB",
        "MethodID": 1143,
        "Description": "recurring payment",
        "BillingAddress": {
        "Country": "TH"
        } 
      }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Payment": {
            "ID": 5879743,
            "SkinID": null,
            "ClientIP": null,
            "Created": "20210202154700",
            "MerchantTransactionID": "s2ptest_truemoney1",
            "OriginatorTransactionID": null,
            "Amount": "100",
            "Currency": "THB",
            "CapturedAmount": null,
            "ReturnURL": null,
            "Description": "recurring payment",
            "MethodID": 1143,
            "MethodOptionID": null,
            "IncludeMethodIDs": null,
            "ExcludeMethodIDs": null,
            "PrioritizeMethodIDs": null,
            "SiteID": 30201,
            "NotificationDateTime": null,
            "Customer": null,
            "BillingAddress": {
                "ID": 1540,
                "City": null,
                "ZipCode": null,
                "State": null,
                "Street": null,
                "StreetNumber": null,
                "HouseNumber": null,
                "HouseExtension": null,
                "Country": "TH"
            },
            "ShippingAddress": null,
            "Articles": null,
            "Details": null,
            "ReferenceDetails": null,
            "CustomParameters": null,
            "PreapprovalID": 28076,
            "Status": {
                "ID": 1,
                "Info": "Open",
                "Reasons": null
            },
            "Fraud": null,
            "MethodTransactionID": null,
            "TokenLifetime": null,
            "Capture": null,
            "PreapprovalDetails": null,
            "RedirectURL": null,
            "Splits": null
        }
    }

    We will notify you about the new status of the payment to the Notification URL you setup in the Merchant Dashboard. The format of the received notification has the same structure as the response of the initial request.

    You need to respond with HTTP code 204 (No Content)!

    Payment notification format:

    Authorization: Basic MzAyMDE6KzlLZUd6S0Y3VzhTLzc5YTVSMzNZSlVnN0U3V0ZOY1piakdmekxWM2JYU25GQ095RnQ=
    
    {
      "Payment": {
        "ID": 5879743,
        "SkinID": null,
        "ClientIP": null,
        "Created": "20210202154700",
        "MerchantTransactionID": "s2ptest_truemoney1",
        "OriginatorTransactionID": null,
        "Amount": "100",
        "Currency": "THB",
        "CapturedAmount": null,
        "ReturnURL": "",
        "Description": "recurring payment",
        "MethodID": 1143,
        "MethodOptionID": null,
        "IncludeMethodIDs": null,
        "ExcludeMethodIDs": null,
        "PrioritizeMethodIDs": null,
        "SiteID": 30201,
        "NotificationDateTime": null,
        "Customer": null,
        "BillingAddress": {
          "ID": 1540,
          "City": null,
          "ZipCode": null,
          "State": null,
          "Street": null,
          "StreetNumber": null,
          "HouseNumber": null,
          "HouseExtension": null,
          "Country": "TH"
        },
        "ShippingAddress": null,
        "Articles": null,
        "Details": null,
        "ReferenceDetails": null,
        "CustomParameters": null,
        "PreapprovalID": 28076,
        "Status": {
          "ID": 2,
          "Info": "Success",
          "Reasons": null
        },
        "Fraud": null,
        "MethodTransactionID": null,
        "TokenLifetime": null,
        "Capture": null,
        "PreapprovalDetails": null,
        "RedirectURL": null,
        "Splits": null
      }
    }

    Truemoney Preapproval Notification

    We will notify you about the new status of the preapproval to the Notification URL you setup in the Merchant Dashboard. The format of the received notification has the same structure as the response of the initial request.

    You need to respond with HTTP code 204 (No Content)!

    Preapproval notification format:

    Authorization: Basic MzAyMDE6KzlLZUd6S0Y3VzhTLzc5YTVSMzNZSlVnN0U3V0ZOY1piakdmekxWM2JYU25GQ095RnQ=
    
    
    
    {
      "Preapproval": {
        "ID": 28076,
        "Created": "20210202153841",
        "MethodID": 1143,
        "SiteID": 30201,
        "MerchantPreapprovalID": "s2ptest_truemoney3",
        "RecurringPeriod": null,
        "PreapprovedMaximumAmount": null,
        "Currency": null,
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "1 year subscription",
        "Customer": {
          "ID": 2625948,
          "MerchantCustomerID": null,
          "Email": "jdoe@gmail.com",
          "FirstName": "John",
          "LastName": "Doe",
          "Gender": null,
          "SocialSecurityNumber": null,
          "Phone": null,
          "Company": null,
          "DateOfBirth": null
        },
        "BillingAddress": {
          "ID": 1540,
          "City": null,
          "ZipCode": null,
          "State": null,
          "Street": null,
          "StreetNumber": null,
          "HouseNumber": null,
          "HouseExtension": null,
          "Country": "TH"
        },
        "Status": {
          "ID": 2,
          "Info": null,
          "Reasons": null
        },
        "RedirectURL": null,
        "MethodOptionID": null,
        "PreapprovedFrequency": null,
        "MandateReference": null,
        "Details": null
      }
    }

    Truemoney Preapproval Request

    Definition: POST /v1/preapprovals

    To initiate a preapproval, you must create a preapproval object. The parameters of the preapproval are sent in the message body as a JSON object. See below an example of a preapproval request for Truemoney (1143).

    Request:

    POST https://paytest.smart2pay.com/v1/preapprovals
    Authorization: Basic MzAyMDE6KzlLZUd6S0Y3VzhTLzc5YTVSMzNZSlVnN0U3V0ZOY1piakdmekxWM2JYU25GQ095RnQ=
    
    {
     "Preapproval": {
       "MerchantPreapprovalID": "s2ptest_truemoney3",
       "Currency": "THB",
       "Description": "1 year subscription",
       "ReturnURL": "http://demo.smart2pay.com/redirect.php",
       "MethodID": 1143,
       "Customer": {
          "FirstName": "John",
          "LastName": "Doe",
          "Email": "jdoe@gmail.com"
         },
       "BillingAddress": {
          "Country": "TH"
          }
       }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Preapproval": {
            "ID": 28076,
            "Created": "20210202153841",
            "MethodID": 1143,
            "SiteID": 30201,
            "MerchantPreapprovalID": "s2ptest_truemoney3",
            "RecurringPeriod": 0,
            "PreapprovedMaximumAmount": null,
            "Currency": "THB",
            "ReturnURL": "http://demo.smart2pay.com/redirect.php",
            "Description": "1 year subscription",
            "Customer": {
                "ID": 2625948,
                "MerchantCustomerID": null,
                "Email": "jdoe@gmail.com",
                "FirstName": "John",
                "LastName": "Doe",
                "Gender": null,
                "SocialSecurityNumber": null,
                "Phone": null,
                "Company": null,
                "DateOfBirth": null
            },
            "BillingAddress": {
                "ID": 1540,
                "City": null,
                "ZipCode": null,
                "State": null,
                "Street": null,
                "StreetNumber": null,
                "HouseNumber": null,
                "HouseExtension": null,
                "Country": "TH"
            },
            "Status": {
                "ID": 1,
                "Info": "Pending",
                "Reasons": null
            },
            "RedirectURL": "https://europaytest.smart2pay.com/AlipayOSP/Preapproval/PreapprovalLanding.aspx?ID=23259&Hash=50143980E584E7DEE54CBA48BA1EC543",
            "MethodOptionID": 0,
            "PreapprovedFrequency": null,
            "MandateReference": null,
            "Details": null
        }
    }

    Truemoney Preapproval Flow

    Truemoney Test Data
    Data Value
    Phone Number: Enter any 10 digit number. Example: 1234567812
    Password: Enter any 4 digit number. Example: 1234
    1. The customer is redirected to Truemoney page. The customer needs to add their phone number attached to the Truemoney wallet and the password.1 Add phone number
    2. The customer confirms the auto-debit user agreement1 Confirm agreement
    3. Upon completion of the payment flow, the customer is redirected to your ReturnUrl.1 Return page when the redirection status is processing

    Truemoney Test Data

    For Truemoney payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Truemoney Payment Flow

    1. The customer is redirected to the Truemoney website where they are prompted to scan a QR code using the Truemoney app.

      1 Type of payment

    2. The user confirms the payment and it is redirected to the Result page.

      1 Payment confirmation

    3. Upon completion of the payment flow, the customer is redirected to your ReturnUrl.

      1 Return page when the redirection status is a success

    Touch’n Go eWallet Test Data

    For Touch’n Go eWallet payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Touch’n Go eWallet Payment Flow

    1. The customer is redirected to the Touch’n Go website where they are prompted to scan a QR code using the Touch’n Go app.

      1 Type of payment

    2. The user confirms the payment and it is redirected to the Result page.

      1 Payment confirmation

    3. Upon completion of the payment flow, the customer is redirected to your ReturnUrl.

      1 Return page when the redirection status is a success

    AlipayHK Test Data

    In order for you to test the AlipayHK payment method successfully, please use the below test data.

    AlipayHK Test Data
    Data Value
    Phone Number: Enter any 10 digit number. Example: 1234567812
    Authentication code: Enter any 6 digit number. Example: 123456
    Payment password: Enter any 6 digit number. Example: 123456

    AlipayHK Payment Flow

    1. The customer is redirected to the AlipayHK website where they are prompted to scan a QR code using the AlipayHK app.

      1 Enter phone

    2. The customer is redirected to AlipayHK page. The user needs to add their phone number attached to the AlipayHK wallet and request a verification code.

      1 Enter Authentication Code

    3. The customer needs to enter the verification code received via SMS on the phone number linked to the AlipayHK wallet.

      1 Account login

    4. The user confirms the payment and the Amount to be charged.

      1 Payment password

    5. The user needs to enter the payment password.

      1 Payment password

    6. The user is redirected to the payment confirmation page where he can see the payment amount details.

      1 Payment password

    7. The payment is successful and the user is redirected to the AlipayHK payment confirmation page.

      1 Payment password

    8. Upon completion of the payment flow, the customer is redirected to your ReturnUrl.

      1 Return page when the redirection status is a success

    KakaoPay Test Data

    For KakaoPay payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Kakaopay Payment Flow

    1. The customer is redirected to the KakaoPay website where they are prompted to scan a QR code using the KakaoPay app. For testing purposes the minimum payment amount is 50 KRW.

      1 Type of payment

    2. The customer confirms the payment using biometric verification or their 6-digit PIN.

      1 Payment confirmation

    3. The customer sees the payment details and a message confirmation of the payment.

      1 Payment confirmation

    4. Upon completion of the payment flow, the customer is redirected to your ReturnUrl.

      1 Return page when the redirection status is a success

    Marketplace Split Payments API

    Split Payments is a unique feature that allows you to split a payment to several SiteIDs previously linked to your merchant account.
    You can initiate a payment with one or more Splits objects depending on the SiteID. The Split object must contain the following parameters: SiteID, Amount, MerchantTransactionID and the OriginatorTransactionID (optional).

    Also MethodID is required to be sent for Payments with Splits.

    The Authorization header of the request must contain the SiteID and APIKey of the Marketplace.

    One-Step Split Payments

    Definition: POST /v1/payments

    A 201 HTTP response (Created) is returned if the payment was correctly initialized.

    Request:

    POST https://paytest.smart2pay.com/v1/payments
    Authorization: Basic MzAyMDE6KzlLZUd6S0Y3VzhTLzc5YTVSMzNZSlVnN0U3V0ZOY1piakdmekxWM2JYU25GQ095RnQ=
    
    {
      "Payment": {
        "MerchantTransactionID": "s2ptest_split1",
        "Amount": "100",
        "Currency": "EUR",      
        "MethodID": 9,
        "OriginatorTransactionID": "4324322",
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",      
        "TokenLifetime": 10,
        "Customer": {    
          "Email": "youremail@email.com",
          "FirstName": "test",
          "LastName": "demo"      
        },    
        "BillingAddress":  {
        "Country": "RO"
        },
        "Splits": [
         {
          "SiteID": 33513,  
          "Amount": "60",
          "MerchantTransactionID": "s2p_test1ad", 
          "OriginatorTransactionID": "4324322-A"
       },
        {
          "SiteID":33512,  
          "Amount": "20",
          "MerchantTransactionID": "s2p_test1ad", 
          "OriginatorTransactionID": "4324322-B"
       },
        {
          "SiteID": 33511,  
          "Amount": "20",
          "MerchantTransactionID": "s2p_test1ad", 
          "OriginatorTransactionID": "4324322-C"
          }
        ]
      }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
      "Payment": {
        "ID": 5581804,
        "SkinID": null,
        "ClientIP": null,
        "Created": "20201202122951",
        "MerchantTransactionID": "s2ptest_split1",
        "OriginatorTransactionID": "4324322",
        "Amount": "100",
        "Currency": "EUR",
        "CapturedAmount": null,
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "",
        "MethodID": 9,
        "MethodOptionID": null,
        "IncludeMethodIDs": null,
        "ExcludeMethodIDs": null,
        "PrioritizeMethodIDs": null,
        "SiteID": 33513,
        "NotificationDateTime": null,
        "Customer": {
          "MerchantCustomerID": null,
          "Email": "youremail@email.com",
          "FirstName": "test",
          "LastName": "demo",
          "Gender": null,
          "SocialSecurityNumber": null,
          "Phone": null,
          "Company": null,
          "DateOfBirth": null
        },
        "BillingAddress": {
          "City": null,
          "ZipCode": null,
          "State": null,
          "Street": null,
          "StreetNumber": null,
          "HouseNumber": null,
          "HouseExtension": null,
          "Country": "RO"
        },
        "ShippingAddress": null,
        "Articles": null,
        "Details": null,
        "ReferenceDetails": null,
        "CustomParameters": null,
        "PreapprovalID": null,
        "Status": {
          "ID": 1,
          "Info": "Open",
          "Reasons": null
        },
        "Fraud": null,
        "MethodTransactionID": null,
        "TokenLifetime": 10,
        "Capture": null,
        "PreapprovalDetails": null,
        "RedirectURL": "https://apitest.smart2pay.com/Home?PaymentToken=17CBE5EE17ADF6C3A52EC29B3B1E26B8.5581804",
        "Splits": [
          {
            "ID": 488,
            "PaymentID": 5581804,
            "SiteID": 33513,
            "MerchantTransactionID": "s2p_test1ad",
            "OriginatorTransactionID": "4324322-A",
            "Created": "20201202122951",
            "Amount": "60",
            "Currency": "EUR",
            "CapturedAmount": "",
            "StateDetails": {
              "ID": 1,
              "Info": "Open",
              "Reasons": null
            }
          },
          {
            "ID": 489,
            "PaymentID": 5581804,
            "SiteID": 33512,
            "MerchantTransactionID": "s2p_test1ad",
            "OriginatorTransactionID": "4324322-B",
            "Created": "20201202122951",
            "Amount": "20",
            "Currency": "EUR",
            "CapturedAmount": "",
            "StateDetails": {
              "ID": 1,
              "Info": "Open",
              "Reasons": null
            }
          },
          {
            "ID": 490,
            "PaymentID": 5581804,
            "SiteID": 33511,
            "MerchantTransactionID": "s2p_test1ad",
            "OriginatorTransactionID": "4324322-C",
            "Created": "20201202122951",
            "Amount": "20",
            "Currency": "EUR",
            "CapturedAmount": "",
            "StateDetails": {
              "ID": 1,
              "Info": "Open",
              "Reasons": null
            }
          }
        ]
      }
    }

    When the main payment is updated to success, also all the Splits are updated to success (splits will always have the status of the main payment for One-Step Payments). We will notify you about the Success status to the Notification URL you setup in the Merchant Dashboard. The format of the received notification has the same structure as the response of the initial request.

    You need to respond with HTTP code 204 (No Content)!

    Payment notification format:

    Authorization: Basic MzAyMDE6KzlLZUd6S0Y3VzhTLzc5YTVSMzNZSlVnN0U3V0ZOY1piakdmekxWM2JYU25GQ095RnQ=
    
    {
      "Payment": {
        "ID": 5581804,
        "SkinID": null,
        "ClientIP": null,
        "Created": "20201202122951",
        "MerchantTransactionID": "test1606912191",
        "OriginatorTransactionID": "4324322",
        "Amount": "100",
        "Currency": "EUR",
        "CapturedAmount": null,
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "",
        "MethodID": 9,
        "MethodOptionID": null,
        "IncludeMethodIDs": null,
        "ExcludeMethodIDs": null,
        "PrioritizeMethodIDs": null,
        "SiteID": 33513,
        "NotificationDateTime": null,
        "Customer": null,
        "BillingAddress": null,
        "ShippingAddress": null,
        "Articles": null,
        "Details": {
          "AccountNumber": null,
          "AccountHolder": "Max Mustermann",
          "IBAN": "DE06000000000023456789",
          "BIC": "SFRTDE20XXX",
          "PrepaidCard": null,
          "PrepaidCardPIN": null,
          "SerialNumbers": null,
          "Wallet": null,
          "ReferenceNumber": null,
          "PayerCountry": "DE",
          "PayerEmail": null,
          "PayerPhone": null,
          "BankCode": null,
          "BankName": null,
          "BankSortCode": null,
          "SocialSecurityNumber": null,
          "BillingCycleStart": null,
          "BillingCycleEnd": null,
          "UnsubscribeInstructions": null,
          "CustomerLoginID": null,
          "PaidAmount": null,
          "PaidCurrency": null,
          "ProviderExchangeRate": 0.0,
          "PayerBankAccountID": null,
          "PayerID": null
        },
        "ReferenceDetails": null,
        "CustomParameters": null,
        "PreapprovalID": null,
        "Status": {
          "ID": 2,
          "Info": "Success",
          "Reasons": null
        },
        "Fraud": null,
        "MethodTransactionID": null,
        "TokenLifetime": 10,
        "Capture": null,
        "PreapprovalDetails": null,
        "RedirectURL": "https://apitest.smart2pay.com/Home?PaymentToken=17CBE5EE17ADF6C3A52EC29B3B1E26B8.5581804",
        "Splits": [
          {
            "ID": 488,
            "PaymentID": 5581804,
            "SiteID": 33513,
            "MerchantTransactionID": "s2p_test1ad",
            "OriginatorTransactionID": "4324322-A",
            "Created": "20201202122951",
            "Amount": "60",
            "Currency": "EUR",
            "CapturedAmount": "",
            "StateDetails": {
              "ID": 2,
              "Info": "Success",
              "Reasons": null
            }
          },
          {
            "ID": 489,
            "PaymentID": 5581804,
            "SiteID": 33512,
            "MerchantTransactionID": "s2p_test1ad",
            "OriginatorTransactionID": "4324322-B",
            "Created": "20201202122951",
            "Amount": "23",
            "Currency": "EUR",
            "CapturedAmount": "",
            "StateDetails": {
              "ID": 2,
              "Info": "Success",
              "Reasons": null
            }
          },
          {
            "ID": 490,
            "PaymentID": 5581804,
            "SiteID": 33511,
            "MerchantTransactionID": "s2p_test1ad",
            "OriginatorTransactionID": "4324322-C",
            "Created": "20201202122951",
            "Amount": "20",
            "Currency": "EUR",
            "CapturedAmount": "",
            "StateDetails": {
              "ID": 2,
              "Info": "Success",
              "Reasons": null
            }
          }
        ]
      }
    }

    Adding splits after transaction has received final status

    A new call for Split Payments allows adding splits after the transaction is Success. This behavior is valid also for other statuses, like if the transaction is failed and we make the call for splits, the splits inserted will be set to failed, same as the transaction’s status. Refunds are only allowed for splits. If a refund is made for a transaction before the split call is made, the split call is rejected.
    Checkout the below example for adding splits after the transaction is success.

    Definition: POST /v1/payments/{id}/splits

    Where:
    • {id} – GlobalPay Payment ID

    A 201 HTTP response (Created) is returned if the payment was correctly initialized.

    Request:

    POST https://paytest.smart2pay.com/v1/payments/5891650/splits
    Authorization: Basic MzAyMDE6KzlLZUd6S0Y3VzhTLzc5YTVSMzNZSlVnN0U3V0ZOY1piakdmekxWM2JYU25GQ095RnQ=
    
    {
    "Splits":[
        {
          "SiteID":33513,  
          "Amount":"50",
          "MerchantTransactionID":"s2p_test1ad", 
          "OriginatorTransactionID":"4324322-A"
        },
        {
          "SiteID":33512,  
          "Amount":"20",
          "MerchantTransactionID":"s2p_test1ad", 
          "OriginatorTransactionID":"4324322-B"
        },
        {
          "SiteID":33511,  
          "Amount":"30",
          "MerchantTransactionID":"s2p_test1ad", 
          "OriginatorTransactionID":"4324322-C"
        }
      ]
    }
    

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
      "Splits": [
        {
          "ID": 1161,
          "PaymentID": 5891650,
          "SiteID": 33513,
          "MerchantTransactionID": "s2p_test1ad",
          "OriginatorTransactionID": "4324322-A",
          "Created": "20210217063428",
          "Amount": "50",
          "Currency": "EUR",
          "CapturedAmount": "",
          "StateDetails": {
            "ID": 2,
            "Info": "Success",
            "Reasons": null
          }
        },
        {
          "ID": 1162,
          "PaymentID": 5891650,
          "SiteID": 33512,
          "MerchantTransactionID": "s2p_test1ad",
          "OriginatorTransactionID": "4324322-B",
          "Created": "20210217063428",
          "Amount": "20",
          "Currency": "EUR",
          "CapturedAmount": "",
          "StateDetails": {
            "ID": 2,
            "Info": "Success",
            "Reasons": null
          }
        },
        {
          "ID": 1163,
          "PaymentID": 5891650,
          "SiteID": 33511,
          "MerchantTransactionID": "s2p_test1ad",
          "OriginatorTransactionID": "4324322-C",
          "Created": "20210217063428",
          "Amount": "30",
          "Currency": "EUR",
          "CapturedAmount": "",
          "StateDetails": {
            "ID": 2,
            "Info": "Success",
            "Reasons": null
          }
        }
      ]
    }
    

    Two-Steps Split Payments

    There are methods for which the successful state is done in 2 steps: Authorization + Capture.

    • Authorize a payment with Splits

      Request:

      POST https://paytest.smart2pay.com/v1/payments
      Authorization: Basic MzAyMDE6KzlLZUd6S0Y3VzhTLzc5YTVSMzNZSlVnN0U3V0ZOY1piakdmekxWM2JYU25GQ095RnQ=
      
      {
        "Payment": {
          "MerchantTransactionID": "SplitPaymentsAuthorized1",
          "Amount": "30",
          "Currency": "EUR",      
          "MethodID": 40,
          "OriginatorTransactionID": "4324322",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",      
          "TokenLifetime": 10,
          "Customer": {    
            "Email": "youremail@email.com",
            "FirstName": "test",
            "LastName": "person"
                },
          "BillingAddress":
          {
          "Country": "RO"
          },  
          "Splits": [
           {
            "SiteID": 30025,  
            "Amount": "5",
            "MerchantTransactionID": "s2p_test1ad", 
            "OriginatorTransactionID": "4324322-A"
         },
          {
            "SiteID": 30122,  
            "Amount": "5",
            "MerchantTransactionID": "s2p_test1ad", 
            "OriginatorTransactionID": "4324322-B"
         },
          {
            "SiteID": 30126,  
            "Amount": "20",
            "MerchantTransactionID": "s2p_test1ad", 
            "OriginatorTransactionID": "4324322-C"
            }
          ]
        }
      }

      Response:

      HTTP/1.1 201 Created
      Content-Type: application/json; charset=utf-8
      
      {
        "Payment": {
          "ID": 401946443,
          "SkinID": null,
          "ClientIP": null,
          "Created": "20201217115710",
          "MerchantTransactionID": "SplitPaymentsAuthorized1",
          "OriginatorTransactionID": "4324322",
          "Amount": "30",
          "Currency": "EUR",
          "CapturedAmount": null,
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "Description": "",
          "MethodID": 40,
          "MethodOptionID": null,
          "IncludeMethodIDs": null,
          "ExcludeMethodIDs": null,
          "PrioritizeMethodIDs": null,
          "SiteID": 30025,
          "NotificationDateTime": null,
          "Customer": {
            "ID": 3173720,
            "MerchantCustomerID": null,
            "Email": "youremail@email.com",
            "FirstName": "test",
            "LastName": "carmen",
            "Gender": null,
            "SocialSecurityNumber": null,
            "Phone": null,
            "Company": null,
            "DateOfBirth": null
          },
          "BillingAddress": {
            "City": null,
            "ZipCode": null,
            "State": null,
            "Street": null,
            "StreetNumber": null,
            "HouseNumber": null,
            "HouseExtension": null,
            "Country": "RO"
          },
          "ShippingAddress": null,
          "Articles": null,
          "Details": null,
          "ReferenceDetails": null,
          "CustomParameters": null,
          "PreapprovalID": null,
          "Status": {
            "ID": 1,
            "Info": "Open",
            "Reasons": []
            },
          "Fraud": null,
          "MethodTransactionID": null,
          "TokenLifetime": 10,
          "Capture": null,
          "PreapprovalDetails": null,
          "RedirectURL": "https://globalapi.smart2pay.com/Home?PaymentToken=370526947BE17A8A1DBBF5FDB065B809.401946443",
          "Splits": [
            {
              "ID": 22,
              "PaymentID": 401946443,
              "SiteID": 30025,
              "MerchantTransactionID": "s2p_test1ad",
              "OriginatorTransactionID": "4324322-A",
              "Created": "20201217115710",
              "Amount": "5",
              "Currency": "EUR",
              "CapturedAmount": "",
              "StateDetails": {
                "ID": 1,
                "Info": "Open",
                "Reasons": []
              }
            },
            {
              "ID": 23,
              "PaymentID": 401946443,
              "SiteID": 30122,
              "MerchantTransactionID": "s2p_test1ad",
              "OriginatorTransactionID": "4324322-B",
              "Created": "20201217115710",
              "Amount": "5",
              "Currency": "EUR",
              "CapturedAmount": "",
              "StateDetails": {
                "ID": 1,
                "Info": "Open",
                "Reasons": []
              }
            },
            {
              "ID": 24,
              "PaymentID": 401946443,
              "SiteID": 30126,
              "MerchantTransactionID": "s2p_test1ad",
              "OriginatorTransactionID": "4324322-C",
              "Created": "20201217115710",
              "Amount": "20",
              "Currency": "EUR",
              "CapturedAmount": "",
              "StateDetails": {
                "ID": 1,
                "Info": "Open",
                "Reasons": []
              }
            }
          ]
        }
      }

    We will notify you about the Authorize status to the Notification URL you setup in the Merchant Dashboard. The format of the received notification has the same structure as the response of the initial request.

    You need to respond with HTTP code 204 (No Content)!

    Payment notification format:

    Authorization: Basic MzAyMDE6KzlLZUd6S0Y3VzhTLzc5YTVSMzNZSlVnN0U3V0ZOY1piakdmekxWM2JYU25GQ095RnQ=
    
    {
      "Payment": {
        "ID": 401946443,
        "SkinID": null,
        "ClientIP": null,
        "Created": "20201217115710",
        "MerchantTransactionID": "SplitPaymentsAuthorized1",
        "OriginatorTransactionID": "4324322",
        "Amount": "30",
        "Currency": "EUR",
        "CapturedAmount": null,
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "",
        "MethodID": 40,
        "MethodOptionID": null,
        "IncludeMethodIDs": null,
        "ExcludeMethodIDs": null,
        "PrioritizeMethodIDs": null,
        "SiteID": 30025,
        "NotificationDateTime": null,
        "Customer": {
          "ID": 3173720,
          "MerchantCustomerID": null,
          "Email": "youremail@email.com",
          "FirstName": "test",
          "LastName": "carmen",
          "Gender": null,
          "SocialSecurityNumber": null,
          "Phone": null,
          "Company": null,
          "DateOfBirth": null
        },
        "BillingAddress": {
          "City": null,
          "ZipCode": null,
          "State": null,
          "Street": null,
          "StreetNumber": null,
          "HouseNumber": null,
          "HouseExtension": null,
          "Country": "RO"
        },
        "ShippingAddress": null,
        "Articles": null,
        "Details": null,
        "ReferenceDetails": null,
        "CustomParameters": null,
        "PreapprovalID": null,
        "Status": {
          "ID": 9,
          "Info": "Authorized",
          "Reasons": []
          },
        "Fraud": null,
        "MethodTransactionID": null,
        "TokenLifetime": 10,
        "Capture": null,
        "PreapprovalDetails": null,
        "RedirectURL": "https://globalapi.smart2pay.com/Home?PaymentToken=370526947BE17A8A1DBBF5FDB065B809.401946443",
        "Splits": [
          {
            "ID": 22,
            "PaymentID": 401946443,
            "SiteID": 30025,
            "MerchantTransactionID": "s2p_test1ad",
            "OriginatorTransactionID": "4324322-A",
            "Created": "20201217115710",
            "Amount": "5",
            "Currency": "EUR",
            "CapturedAmount": "",
            "StateDetails": {
              "ID": 9,
              "Info": "Authorized",
              "Reasons": []
            }
          },
          {
            "ID": 23,
            "PaymentID": 401946443,
            "SiteID": 30122,
            "MerchantTransactionID": "s2p_test1ad",
            "OriginatorTransactionID": "4324322-B",
            "Created": "20201217115710",
            "Amount": "5",
            "Currency": "EUR",
            "CapturedAmount": "",
            "StateDetails": {
              "ID": 9,
              "Info": "Authorized",
              "Reasons": []
            }
          },
          {
            "ID": 24,
            "PaymentID": 401946443,
            "SiteID": 30126,
            "MerchantTransactionID": "s2p_test1ad",
            "OriginatorTransactionID": "4324322-C",
            "Created": "20201217115710",
            "Amount": "20",
            "Currency": "EUR",
            "CapturedAmount": "",
            "StateDetails": {
              "ID": 9,
              "Info": "Authorized",
              "Reasons": []
            }
          }
        ]
      }
    }

      • Capture a Split Payment

        Definition: Full Capture – POST /v1/payments/{id}/capture
        Partial Capture – POST /v1/payments/{id}/splits/{id}/capture?{amount}

        Where:
        • payments {id} – GlobalPay Payment ID
        • {amount} – The amount to be captured smaller or equal than the initial authorized amount
        • splits {id} – GlobalPay Split ID

        Once the payment has an Authorized status, you can capture either the full amount or a partial amount of the initial authorized amount for the transaction depending on the Split ID provided and the amount.

        Keep in mind that at the moment GlobalPay accepts only one capture per payment!

      • For a Full Capture of a payment the statuses of splits are the same as of the main payment. Checkout the below example of a full captured split payment:
        POST https://paytest.smart2pay.com/v1/payments/5577675/capture
        Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=

        Response:

        HTTP/1.1 200 OK
        Content-Type: application/json; charset=utf-8
        
        {
          "Payment": {
            "ID": 5577675,
            "SkinID": null,
            "ClientIP": null,
            "Created": "20201126114150",
            "MerchantTransactionID": "carmen1606390911",
            "OriginatorTransactionID": "4324322",
            "Amount": "100",
            "Currency": "EUR",
            "CapturedAmount": "100",
            "ReturnURL": "http://demo.smart2pay.com/redirect.php",
            "Description": null,
            "MethodID": 94,
            "MethodOptionID": null,
            "IncludeMethodIDs": null,
            "ExcludeMethodIDs": null,
            "PrioritizeMethodIDs": null,
            "SiteID": 33513,
            "NotificationDateTime": "20201126114316",
            "Customer": null,
            "BillingAddress": null,
            "ShippingAddress": null,
            "Articles": null,
            "Details": null,
            "ReferenceDetails": null,
            "CustomParameters": null,
            "PreapprovalID": null,
            "Status": {
              "ID": 2,
              "Info": "Success",
              "Reasons": null
            },
            "Fraud": null,
            "MethodTransactionID": null,
            "TokenLifetime": 10,
            "Capture": null,
            "PreapprovalDetails": null,
            "RedirectURL": "https://apitest.smart2pay.com/Home?PaymentToken=BBCA1F4A583A3AE6639E97C0589B1FF3.5577675",
            "Splits": [
              {
                "ID": 367,
                "PaymentID": 5577675,
                "SiteID": 33513,
                "MerchantTransactionID": "s2p_test1ad",
                "OriginatorTransactionID": "4324322-A",
                "Created": "20201126114150",
                "Amount": "60",
                "Currency": "EUR",
                "CapturedAmount": "",
                "StateDetails": {
                  "ID": 2,
                  "Info": "Success",
                  "Reasons": null
                }
              },
              {
                "ID": 368,
                "PaymentID": 5577675,
                "SiteID": 33512,
                "MerchantTransactionID": "s2p_test1ad",
                "OriginatorTransactionID": "4324322-B",
                "Created": "20201126114150",
                "Amount": "20",
                "Currency": "EUR",
                "CapturedAmount": "",
                "StateDetails": {
                  "ID": 2,
                  "Info": "Success",
                  "Reasons": null
                }
              },
              {
                "ID": 369,
                "PaymentID": 5577675,
                "SiteID": 33511,
                "MerchantTransactionID": "s2p_test1ad",
                "OriginatorTransactionID": "4324322-C",
                "Created": "20201126114150",
                "Amount": "20",
                "Currency": "EUR",
                "CapturedAmount": "",
                "StateDetails": {
                  "ID": 2,
                  "Info": "Success",
                  "Reasons": null
                }
              }
            ]
          }
        }
        

    We will notify you about the Success status to the Notification URL you setup in the Merchant Dashboard. The format of the received notification has the same structure as the response of the initial request. There are methods, such as Post Finance, for which you will receive in the response an intermediate CaptureRequested status (ID = 13), followed by the notification containing the final Success status (ID = 2).

    You need to respond with HTTP code 204 (No Content)!

    Payment notification format:

    Authorization: Basic MzAyMDE6KzlLZUd6S0Y3VzhTLzc5YTVSMzNZSlVnN0U3V0ZOY1piakdmekxWM2JYU25GQ095RnQ=
    
    {
      "Payment": {
        "ID": 5577639,
        "SkinID": null,
        "ClientIP": null,
        "Created": "20201126093222",
        "MerchantTransactionID": "carmen1606383142",
        "OriginatorTransactionID": "4324322",
        "Amount": "100",
        "Currency": "EUR",
        "CapturedAmount": "100",
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "",
        "MethodID": 1130,
        "MethodOptionID": null,
        "IncludeMethodIDs": null,
        "ExcludeMethodIDs": null,
        "PrioritizeMethodIDs": null,
        "SiteID": 33513,
        "NotificationDateTime": null,
        "Customer": null,
        "BillingAddress": null,
        "ShippingAddress": null,
        "Articles": null,
        "Details": null,
        "ReferenceDetails": null,
        "CustomParameters": null,
        "PreapprovalID": null,
        "Status": {
          "ID": 2,
          "Info": "Success",
          "Reasons": null
        },
        "Fraud": null,
        "MethodTransactionID": null,
        "TokenLifetime": 10,
        "Capture": null,
        "PreapprovalDetails": null,
        "RedirectURL": "https://apitest.smart2pay.com/Home?PaymentToken=8C8518387DAC0D71DC7AB9E3909AD21D.5577639",
        "Splits": [
          {
            "ID": 337,
            "PaymentID": 5577639,
            "SiteID": 33513,
            "MerchantTransactionID": "s2p_test1ad",
            "OriginatorTransactionID": "4324322-A",
            "Created": "20201126093222",
            "Amount": "60",
            "Currency": "EUR",
            "CapturedAmount": "",
            "StateDetails": {
              "ID": 2,
              "Info": "Success",
              "Reasons": null
            }
          },
          {
            "ID": 338,
            "PaymentID": 5577639,
            "SiteID": 33512,
            "MerchantTransactionID": "s2p_test1ad",
            "OriginatorTransactionID": "4324322-B",
            "Created": "20201126093222",
            "Amount": "20",
            "Currency": "EUR",
            "CapturedAmount": "",
            "StateDetails": {
              "ID": 2,
              "Info": "Success",
              "Reasons": null
            }
          },
          {
            "ID": 339,
            "PaymentID": 5577639,
            "SiteID": 33511,
            "MerchantTransactionID": "s2p_test1ad",
            "OriginatorTransactionID": "4324322-C",
            "Created": "20201126093222",
            "Amount": "20",
            "Currency": "EUR",
            "CapturedAmount": "",
            "StateDetails": {
              "ID": 2,
              "Info": "Success",
              "Reasons": null
            }
          }
        ]
      }
    }
    

    • Partial Capture with Splits: each split has CapturedAmount sent in the request, the main payment has CapturedAmount = Sum of CapturedAmount of all the splits sent in request:

      Request:

      POST https://paytest.smart2pay.com/v1/payments/5845686/capture
      Authorization: Basic MzAyMDE6KzlLZUd6S0Y3VzhTLzc5YTVSMzNZSlVnN0U3V0ZOY1piakdmekxWM2JYU25GQ095RnQ={
          "Payment": {
              "Splits": [
              {
                  "ID": 797,
                  "Amount": 10
              },
              {
                  "ID": 798,
                  "Amount": 10
              },
              
              {
                  "ID": 799,
                  "Amount": 20
              }
            ]
          }
      }
      

      Response:

      HTTP/1.1 200 OK
      Content-Type: application/json; charset=utf-8
      
      {
        "Payment": {
          "ID": 5845686,
          "SkinID": null,
          "ClientIP": null,
          "Created": "20201214142216",
          "MerchantTransactionID": "carmen1607955727",
          "OriginatorTransactionID": "4324322",
          "Amount": "100",
          "Currency": "EUR",
          "CapturedAmount": "40",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "Description": null,
          "MethodID": 94,
          "MethodOptionID": null,
          "IncludeMethodIDs": null,
          "ExcludeMethodIDs": null,
          "PrioritizeMethodIDs": null,
          "SiteID": 33513,
          "NotificationDateTime": "20201214142459",
          "Customer": null,
          "BillingAddress": null,
          "ShippingAddress": null,
          "Articles": null,
          "Details": null,
          "ReferenceDetails": null,
          "CustomParameters": null,
          "PreapprovalID": null,
          "Status": {
            "ID": 35,
            "Info": "PartiallyCaptured",
            "Reasons": null
          },
          "Fraud": null,
          "MethodTransactionID": null,
          "TokenLifetime": 10,
          "Capture": null,
          "PreapprovalDetails": null,
          "RedirectURL": "https://apitest.smart2pay.com/Home?PaymentToken=082F51365E403515CE1A77CB6668F954.5845686",
          "Splits": [
            {
              "ID": 797,
              "PaymentID": 5845686,
              "SiteID": 33513,
              "MerchantTransactionID": "s2p_test1ad",
              "OriginatorTransactionID": "4324322-A",
              "Created": "20201214142218",
              "Amount": "30",
              "Currency": "EUR",
              "CapturedAmount": "10",
              "StateDetails": {
                "ID": 35,
                "Info": "PartiallyCaptured",
                "Reasons": null
              }
            },
            {
              "ID": 798,
              "PaymentID": 5845686,
              "SiteID": 33512,
              "MerchantTransactionID": "s2p_test1ad",
              "OriginatorTransactionID": "4324322-B",
              "Created": "20201214142218",
              "Amount": "30",
              "Currency": "EUR",
              "CapturedAmount": "10",
              "StateDetails": {
                "ID": 35,
                "Info": "PartiallyCaptured",
                "Reasons": null
              }
            },
            {
              "ID": 799,
              "PaymentID": 5845686,
              "SiteID": 33511,
              "MerchantTransactionID": "s2p_test1ad",
              "OriginatorTransactionID": "4324322-C",
              "Created": "20201214142218",
              "Amount": "40",
              "Currency": "EUR",
              "CapturedAmount": "20",
              "StateDetails": {
                "ID": 35,
                "Info": "PartiallyCaptured",
                "Reasons": null
              }
            }
          ]
        }
      }
      

    • Partial Capture per Splits: the captured Split is set to status PartiallyCaptured but the other Splits remain with status Authorized:
      POST https://paytest.smart2pay.com/v1/payments/5581839/splits/504/capture?amount=10
      Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=

      Response:

      HTTP/1.1 200 OK
      Content-Type: application/json; charset=utf-8
      
      {
        "Payment": {
          "ID": 5581839,
          "SkinID": null,
          "ClientIP": null,
          "Created": "20201202132638",
          "MerchantTransactionID": "carmen1606915598",
          "OriginatorTransactionID": "4324322-A",
          "Amount": "100",
          "Currency": "EUR",
          "CapturedAmount": "10",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "Description": null,
          "MethodID": 94,
          "MethodOptionID": null,
          "IncludeMethodIDs": null,
          "ExcludeMethodIDs": null,
          "PrioritizeMethodIDs": null,
          "SiteID": 33513,
          "NotificationDateTime": "20201202132859",
          "Customer": null,
          "BillingAddress": null,
          "ShippingAddress": null,
          "Articles": null,
          "Details": null,
          "ReferenceDetails": null,
          "CustomParameters": null,
          "PreapprovalID": null,
          "Status": {
            "ID": 35,
            "Info": "PartiallyCaptured",
            "Reasons": null
          },
          "Fraud": null,
          "MethodTransactionID": null,
          "TokenLifetime": 10,
          "Capture": null,
          "PreapprovalDetails": null,
          "RedirectURL": "https://apitest.smart2pay.com/Home?PaymentToken=0ABF968F50818372857AEDC9031BF437.5581839",
          "Splits": [
            {
              "ID": 504,
              "PaymentID": 5581839,
              "SiteID": 33512,
              "MerchantTransactionID": "s2p_test1ad",
              "OriginatorTransactionID": "4324322-A",
              "Created": "20201202132638",
              "Amount": "30",
              "Currency": "EUR",
              "CapturedAmount": "10",
              "StateDetails": {
                "ID": 35,
                "Info": "PartiallyCaptured",
                "Reasons": null
              }
            }
          ]
        }
      }
      

    • Cancel a full payment

      Definition: POST /v1/payments/{id}/cancel

      Where:
      • {id} – GlobalPay Payment ID

      A payment can be cancelled if it has an Authorized or an Open status. Only the full payment with an Authorized status will support cancellation. If one of its splits payments has been previously captured, the payment changed its status in PartiallyCaptured so it will no longer support cancellation.

      A 200 HTTP response (OK) is returned if the request was completed successfully.

      POST https://paytest.smart2pay.com/v1/payments/5583382/cancel
      Authorization: Basic MzAyMDE6KzlLZUd6S0Y3VzhTLzc5YTVSMzNZSlVnN0U3V0ZOY1piakdmekxWM2JYU25GQ095RnQ=

      Response:

      HTTP/1.1 200 OK
      Content-Type: application/json; charset=utf-8
      
      {
        "Payment": {
          "ID": 5583382,
          "SkinID": null,
          "ClientIP": null,
          "Created": "20201204132034",
          "MerchantTransactionID": "carmen1607088034",
          "OriginatorTransactionID": "4324322",
          "Amount": "100",
          "Currency": "EUR",
          "CapturedAmount": null,
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "Description": null,
          "MethodID": 94,
          "MethodOptionID": null,
          "IncludeMethodIDs": null,
          "ExcludeMethodIDs": null,
          "PrioritizeMethodIDs": null,
          "SiteID": 33513,
          "NotificationDateTime": "20201204132126",
          "Customer": null,
          "BillingAddress": null,
          "ShippingAddress": null,
          "Articles": null,
          "Details": null,
          "ReferenceDetails": null,
          "CustomParameters": null,
          "PreapprovalID": null,
          "Status": {
            "ID": 3,
            "Info": "Cancelled",
            "Reasons": null
          },
          "Fraud": null,
          "MethodTransactionID": null,
          "TokenLifetime": null,
          "Capture": null,
          "PreapprovalDetails": null,
          "RedirectURL": null,
          "Splits": [
            {
              "ID": 524,
              "PaymentID": 5583382,
              "SiteID": 33513,
              "MerchantTransactionID": "s2p_test1ad",
              "OriginatorTransactionID": "4324322-A",
              "Created": "20201204132034",
              "Amount": "60",
              "Currency": "EUR",
              "CapturedAmount": "",
              "StateDetails": {
                "ID": 3,
                "Info": "Cancelled",
                "Reasons": null
              }
            },
            {
              "ID": 525,
              "PaymentID": 5583382,
              "SiteID": 33512,
              "MerchantTransactionID": "s2p_test1ad",
              "OriginatorTransactionID": "4324322-B",
              "Created": "20201204132034",
              "Amount": "20",
              "Currency": "EUR",
              "CapturedAmount": "",
              "StateDetails": {
                "ID": 3,
                "Info": "Cancelled",
                "Reasons": null
              }
            },
            {
              "ID": 526,
              "PaymentID": 5583382,
              "SiteID": 33511,
              "MerchantTransactionID": "s2p_test1ad",
              "OriginatorTransactionID": "4324322-C",
              "Created": "20201204132034",
              "Amount": "20",
              "Currency": "EUR",
              "CapturedAmount": "",
              "StateDetails": {
                "ID": 3,
                "Info": "Cancelled",
                "Reasons": null
              }
            }
          ]
        }
      }
      

    • Refund a Split

      Definition: POST /v1/payments/{id}/splits/{id}/refunds

      Where:
      • payments/{id} – GlobalPay Payment ID
      • splits/{id} – The ID of the split payment

      At the moment only refunds per splits are allowed. When you are initiating a refund you need to provide the Refund Amount and the Merchant Transaction ID, that is automatically generated. You can change this ID by introducing your ID value.

      A 201 HTTP response (Created) is returned if the refund was correctly initialized.

      Request:

      POST https://paytest.smart2pay.com/v1/payments/5611633/splits/737/refunds
      Authorization: Basic MzAyMDE6KzlLZUd6S0Y3VzhTLzc5YTVSMzNZSlVnN0U3V0ZOY1piakdmekxWM2JYU25GQ095RnQ={
        "Refund": {
            "MerchantTransactionID": "carmen1607607300",
            "Amount": 60,   
            "Description": "test refund" 
        }
      }
      

      Response:

      HTTP/1.1 201 Created
      Content-Type: application/json; charset=utf-8
      
      {
        "Refund": {
          "ID": 55745,
          "Created": "20201210133500",
          "MerchantTransactionID": "carmen1607607300",
          "OriginatorTransactionID": "4324322-A-refund1",
          "InitialPaymentID": 5611633,
          "Amount": "60",
          "Currency": "EUR",
          "Description": "test refund",
          "TypeID": 1,
          "SiteID": 33513,
          "Details": null,
          "Customer": null,
          "BillingAddress": null,
          "BankAddress": null,
          "Articles": null,
          "Status": {
            "ID": 1,
            "Info": "Open",
            "Reasons": null
          },
          "SplitID": 737
        }
      }
      

    Alfa-Click Test Data

    For Alfa-Click payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Alfa-Click Payment Flow

    1. The Customer enters his email address.

      1 Enter email

    2. The Customer reviews the payment details and logins to his Alfa-Click account in order to complete the transaction.

      1 Payment instructions

    3. Upon completion of the payment flow, the customer is redirected to your ReturnUrl.

      1 Return page when the redirection status is Processing

    Cash-in CIS Test Data

    For Cash-in CIS payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Cash-in CISPayment Flow

    1. The Customer enters his email address.

      1 Enter email

    2. The Customer receives the payment details and the order number with which he can complete the payment at any ATM or office and clicks Pay in order to complete the transaction.

      1 Payment instructions

    3. Upon completion of the payment flow, the customer is redirected to your ReturnUrl.

      1 Return page when the redirection status is Processing

    Boleto Bancario Brazil Test Data

    For Boleto Bancario Brazil payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Boleto Bancario Brazil Payment Flow

    1. The customer enters his Email Address, Name and CPF/CNPJ.
      Please note that for Brazil the Customer Social Security Number parameter consists of CPF/CNPJ. For more information about the CPF/CNPJ please click here.

      1 Enter customer details

    2. The customer verifies the transaction details and confirms the payment. He also has the possibility to change the payment method if needed.1 Print Boleto
    3. The customer is redirected to the payment confirmation page where he can choose to complete the payment by using the payment code received (payment through internet banking) or by printing the Boleto (payment at any bank agency).1 Print Boleto
    4. The customer receives the Boleto with all the necessary payment details. In order to complete the payment, he needs to print the Boleto and go to a physical bank branch in his area and pay. 1 Print Boleto

    Get information on Payouts Balance

    You can get information about your merchant balance by using a few actions based on GET HTTP request. You can specify various filters as parameters in the query string in order to get a customized list of your available balances per MethodID and/or CurrencyCode.

    Definition: GET /v1/payoutsbalance/methodID/currencyCode

    Where:
    • {methodID} – The ID of the payment method: SEPA Payouts (MethodID = 1), Trustly (MethodID = 29).
    • {currencyCode} – The currency in which you sell the services or products. Format is according to ISO 4217, a three-letter code.
    • The below request allows you to get all the balances that are active per SiteID without specifying any parameter.

      Request:

      GET https://paytest.smart2pay.com/v1/payoutsbalance/
      Authorization: Basic MzAyMDE6KzlLZUd6S0Y3VzhTLzc5YTVSMzNZSlVnN0U3V0ZOY1piakdmekxWM2JYU25GQ095RnQ=

      Response:

      HTTP/1.1 200 OK
      Content-Type: application/json; charset=utf-8
      
      {
        "Balances": [
          {
            "MerchantID": 1045,
            "SiteID": 30201,
            "MethodID": 1,
            "CurrencyCode": "EUR",
            "AvailableAmount": 10000.00,
            "LastBalanceUpdateDateTime": "2020-10-29T15:36:10.807"
          },
          {
            "MerchantID": 1045,
            "SiteID": 30201,
            "MethodID": 1,
            "CurrencyCode": "RON",
            "AvailableAmount": 500000.00,
            "LastBalanceUpdateDateTime": "2020-10-29T15:36:34.733"
          },
          {
            "MerchantID": 1045,
            "SiteID": 30201,
            "MethodID": 29,
            "CurrencyCode": "EUR",
            "AvailableAmount": 20000.00,
            "LastBalanceUpdateDateTime": "2020-10-29T15:36:21.047"
          }
        ]
      }

    • The below request allows you to get all the balances that are active for your SiteID for a specific payment method.

      Request:

      GET https://paytest.smart2pay.com/v1/payoutsbalance/1
      Authorization: Basic MzAyMDE6KzlLZUd6S0Y3VzhTLzc5YTVSMzNZSlVnN0U3V0ZOY1piakdmekxWM2JYU25GQ095RnQ=

      Response:

      HTTP/1.1 200 OK
      Content-Type: application/json; charset=utf-8
      
      {
        "Balances": [
          {
            "MerchantID": 1045,
            "SiteID": 30201,
            "MethodID": 1,
            "CurrencyCode": "EUR",
            "AvailableAmount": 10000.00,
            "LastBalanceUpdateDateTime": "2020-10-29T15:36:10.807"
          },
          {
            "MerchantID": 1045,
            "SiteID": 30201,
            "MethodID": 1,
            "CurrencyCode": "RON",
            "AvailableAmount": 500000.00,
            "LastBalanceUpdateDateTime": "2020-10-29T15:36:34.733"
          }
        ]
      }

    • The below request allows you to get all the balances that are active for your SiteID for a specific currency.

      Request:

      GET https://paytest.smart2pay.com/v1/payoutsbalance/EUR
      Authorization: Basic MzAyMDE6KzlLZUd6S0Y3VzhTLzc5YTVSMzNZSlVnN0U3V0ZOY1piakdmekxWM2JYU25GQ095RnQ=

      Response:

      HTTP/1.1 200 OK
      Content-Type: application/json; charset=utf-8
      
      
      
      {
        "Balances": [
          {
            "MerchantID": 1045,
            "SiteID": 30201,
            "MethodID": 1,
            "CurrencyCode": "EUR",
            "AvailableAmount": 10000.00,
            "LastBalanceUpdateDateTime": "2020-10-29T15:36:10.807"
          },
          {
            "MerchantID": 1045,
            "SiteID": 30201,
            "MethodID": 29,
            "CurrencyCode": "EUR",
            "AvailableAmount": 20000.00,
            "LastBalanceUpdateDateTime": "2020-10-29T15:36:21.047"
          }
        ]
      }

    • The below request allows you to get all the balances that are active for your SiteID for a specific payment method and currency.

      Request:

      GET https://paytest.smart2pay.com/v1/payoutsbalance/1/EUR
      Authorization: Basic MzAyMDE6KzlLZUd6S0Y3VzhTLzc5YTVSMzNZSlVnN0U3V0ZOY1piakdmekxWM2JYU25GQ095RnQ=

      Response:

      HTTP/1.1 200 OK
      Content-Type: application/json; charset=utf-8
      
      {
        "Balances": [
          {
            "MerchantID": 1045,
            "SiteID": 30201,
            "MethodID": 1,
            "CurrencyCode": "EUR",
            "AvailableAmount": 10000.00,
            "LastBalanceUpdateDateTime": "2020-10-29T15:36:10.807"
          }
        ]
      }

    Touch’n Go Test Data

    For Touch’n Go payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Touch’n Go Payment Flow

    1. The customer enters his Email Address, Name and Phone Number.

      1 Enter customer details

    2. The customer confirms the payment after reviewing all the details of the payment.

      1 Print Boleto

    3. The customer can pay now with his Touch’n Go Wallet. Download and register for the Touch ‘n Go eWallet app, tap on the “Scan” icon and scan the QR code here to complete the payment.

      1 Print Boleto

    Fawry Wallet Test Data

    For Fawry Wallet payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Fawry Payment Flow

    1. The customer enters his Email Address and his Social Security Number (SSN).

      1 Enter customer details

    2. The customer receives the necessary information to make the payment, including a reference number. The customer will use the reference number to pay through Fawry channels and outlets within the specified time.

      1 Print Boleto

    3. Upon completion of the payment flow the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is Processing

    Loterica Test Data

    For Loterica payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Loterica Payment Flow

    1. The customer enters his Email Address, Name and CPF/CNPJ.
      Please note that for Brazil the Customer Social Security Number parameter consists of CPF/CNPJ. For more information about the CPF/CNPJ please click here.

      1 Enter customer details

    2. The customer confirms the payment after reviewing all the details of the payment.

      1 Print Boleto

    3. The customer receives the code necessary to make the payment. He will also receive via email all the payment data. In order to complete the payment, he needs to go to a physical bank branch in his area in 3 days time. The payment will be approved in less than one hour..

      1 Print Boleto

    4. Upon completion of the payment flow the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is Processing

    Marketplace Split Card Payments API – (preview)

    1. Authorize a payment with Splits

      Definition: POST /v1/payments

      Split Card Payments is a unique feature that allows you to split a payment to several SiteIDs previously linked to your merchant account. Initiate a payment with one or more Splits objects depending on the SiteID. The Split object must contain the following parameters: SiteID, Amount, MerchantTransactionID and the OriginatorTransactionID.

      Please keep in mind that the Authorization header of the request must use the SiteID of the Marketplace.

      A 201 HTTP response (Created) is returned if the payment was correctly initialized.

      Request:

      POST https://securetest.smart2pay.com/v1/payments
      Authorization: Basic MTAxMDpnYWJp
      
      { 
        "Payment": {  
        "MerchantTransactionID": "s2p_test1a",
        "Amount": "100",
        "Currency": "EUR",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "Description": "Split Payment test",
          "StatementDescriptor": "card payment",
          "OriginatorTransactionID":"34991440",
          "ClientIP": "82.208.151.136",
          "BillingAddress": {
            "City": "Iasi",
            "ZipCode": "7000-49",
            "State": "Iasi",
            "Street": "Sf Lazar",
            "StreetNumber": "37",
            "HouseNumber1": "5A",
            "HouseExtension1": "-",
            "Country": "BR"
          },
          "ShippingAddress": {
            "City": "Iasi",
            "ZipCode": "700049",
            "State": "Iasi",
            "Street": "Sf Lazar",
            "StreetNumber": "37",
            "HouseNumber": "-",
            "HouseExtension": "-",
            "Country": "BR"
          },
          "Customer" : {
            "FirstName":"John",
            "LastName":"Dow",
            "Email": "challenge@challenge.com",
            "SocialSecurityNumber": "00003456789"
          },
         "Card": {
            "HolderName": "Johnn Snow",
            "Number": "4000023104662535", 
            "ExpirationMonth": "12",
            "ExpirationYear": "2023",
            "SecurityCode": "554",
            "RequireSecurityCode1": false
          },
      
          "Capture": false,
          "Retry": false,
          "GenerateCreditCardToken": false,
          "3DSecure": false,
      
           "Splits": [
            {
            "SiteID": 1000,
            "Amount": "60",
            "MerchantTransactionID" : "s2p_test1ad", 
            "OriginatorTransactionID": "34991440-A"
          },
          {
            "SiteID": 1061,
            "Amount": "40",
            "MerchantTransactionID" : "s2p_test1233", 
            "OriginatorTransactionID": "34991440-B"
          }
        ]
        }
      }
      

      Response:

      HTTP/1.1 201 Created
      Content-Type: application/json; charset=utf-8
      
      {
          "Payment": {
              "ID": 428473,
              "ClientIP": "82.208.151.136",
              "SkinID": null,
              "Created": "20200702132836",
              "MerchantTransactionID": "s2p_test1a",
              "OriginatorTransactionID": "34991440",
              "Amount": "100",
              "Currency": "EUR",
              "CapturedAmount": "0",
              "ReturnURL": "http://demo.smart2pay.com/redirect.php",
              "Description": "Split Payment test",
              "StatementDescriptor": "card payment",
              "MethodID": 6,
              "MethodOptionID": null,
              "SiteID": 66789,
              "NotificationDateTime": null,
              "Customer": {
                  "ID": 2766,
                  "MerchantCustomerID": null,
                  "Email": "challenge@challenge.com",
                  "FirstName": "John",
                  "LastName": "Dow",
                  "Gender": null,
                  "SocialSecurityNumber": "00003456789",
                  "Phone": null,
                  "Company": null
              },
              "BillingAddress": {
                  "ID": 2963,
                  "City": "Iasi",
                  "ZipCode": "7000-49",
                  "State": "Iasi",
                  "Street": "Sf Lazar",
                  "StreetNumber": "37",
                  "HouseNumber": null,
                  "HouseExtension": null,
                  "Country": "BR"
              },
              "ShippingAddress": {
                  "ID": 2614,
                  "City": "Iasi",
                  "ZipCode": "700049",
                  "State": "Iasi",
                  "Street": "Sf Lazar",
                  "StreetNumber": "37",
                  "HouseNumber": "-",
                  "HouseExtension": "-",
                  "Country": "BR"
              },
              "Articles": null,
              "Card": {
                  "HolderName": "Johnn Snow",
                  "Number": "Visa-2535",
                  "ExpirationMonth": "12",
                  "ExpirationYear": "2023"
              },
              "CreditCardToken": null,
              "Status": {
                  "ID": 9,
                  "Info": "Authorized",
                  "Reasons": []
              },
              "MethodTransactionID": "111067",
              "AuthorizationCode": "111067",
              "PaymentTokenLifetime": 10,
              "Capture": false,
              "CaptureDetails": null,
              "Retry": false,
              "RedirectURL": null,
              "3DSecure": false,
              "3DSecureData": null,
              "DeviceInfo": null,
              "ScaExemption": null,
              "CardOnFile": null,
              "Fraud": {
                  "Status": "Accept",
                  "Score": 31,
                  "Reason": "No decision provided"
              },
              "AddressVerification": null,
              "Splits": [
                  {
                      "ID": 446,
                      "PaymentID": 428473,
                      "SiteID": 1000,
                      "MerchantTransactionID": "s2p_test1ad",
                      "OriginatorTransactionID": "34991440-A",
                      "Created": "20200702132840",
                      "Amount": "60",
                      "Currency": "EUR",
                      "CapturedAmount": "0",
                      "StateDetails": {
                          "ID": 9,
                          "Info": "Authorized",
                          "Reasons": []
                      }
                  },
                  {
                      "ID": 447,
                      "PaymentID": 428473,
                      "SiteID": 1061,
                      "MerchantTransactionID": "s2p_test1233",
                      "OriginatorTransactionID": "34991440-B",
                      "Created": "20200702132840",
                      "Amount": "40",
                      "Currency": "EUR",
                      "CapturedAmount": "0",
                      "StateDetails": {
                          "ID": 9,
                          "Info": "Authorized",
                          "Reasons": []
                      }
                  }
              ]
          }
      }

    2. Capture a Split

      Definition: Full Capture – POST /v1/payments/{id}/capture

      Where:
      • {id} – GlobalPay Payment ID

      Once the payment has an Authorized status, you can capture either the full amount or a partial amount of the initial authorized amount for the transaction depending on the Split ID provided and the amount. You only need to sent in the Request the Split ID and the amount desired to be captured. Checkout the below example of a captured split payment.

      Request:

      POST https://securetest.smart2pay.com/v1/payments/428473/capture
      Authorization: Basic MTAxMDpnYWJp
      
      {
          "Payment": {
              "Split": {
                  "ID": 446,
                  "Amount": 60,
                  "OriginatorTransactionID": "34991440-A"
              }
          }
      }

      Response:

      HTTP/1.1 200 OK
      Content-Type: application/json; charset=utf-8
      
      {
          "Payment": {
              "ID": 428473,
              "ClientIP": "82.208.151.136",
              "SkinID": null,
              "Created": "20200702132836",
              "MerchantTransactionID": "s2p_test1a",
              "OriginatorTransactionID": "34991440-A",
              "Amount": "100",
              "Currency": "EUR",
              "CapturedAmount": "60",
              "ReturnURL": "http://demo.smart2pay.com/redirect.php",
              "Description": "Split Payment test",
              "StatementDescriptor": "card payment",
              "MethodID": 6,
              "MethodOptionID": null,
              "SiteID": 66789,
              "NotificationDateTime": null,
              "Customer": null,
              "BillingAddress": null,
              "ShippingAddress": null,
              "Articles": null,
              "Card": {
                  "HolderName": "Johnn Snow",
                  "Number": "Visa-2535",
                  "ExpirationMonth": "12",
                  "ExpirationYear": "2023"
              },
              "CreditCardToken": null,
              "Status": {
                  "ID": 35,
                  "Info": "PartiallyCaptured",
                  "Reasons": []
              },
              "MethodTransactionID": null,
              "AuthorizationCode": "111067",
              "PaymentTokenLifetime": null,
              "Capture": false,
              "CaptureDetails": null,
              "Retry": false,
              "RedirectURL": null,
              "3DSecure": false,
              "3DSecureData": null,
              "DeviceInfo": null,
              "ScaExemption": null,
              "CardOnFile": null,
              "Fraud": null,
              "AddressVerification": null,
              "Split": {
                  "ID": 446,
                  "PaymentID": 428473,
                  "SiteID": 1000,
                  "MerchantTransactionID": "s2p_test1ad",
                  "OriginatorTransactionID": "34991440-A",
                  "Created": "20200702132840",
                  "Amount": "60",
                  "Currency": "EUR",
                  "CapturedAmount": "60",
                  "StateDetails": {
                      "ID": 11,
                      "Info": "Captured",
                      "Reasons": []
                  },
                  "CaptureDetails": {
                      "ID": 29035,
                      "PaymentID": 428473,
                      "SiteID": 66789,
                      "Created": "20200702141826",
                      "MerchantTransactionID": "s2p_test1a",
                      "OriginatorTransactionID": "34991440-A",
                      "Amount": "60",
                      "Currency": "EUR",
                      "Status": {
                          "ID": 2,
                          "Info": "Success",
                          "Reasons": []
                      }
                  }
              }
          }
      }

    3. Refund a Split

      Definition: POST /v1/payments/{id}/splits/{id}/captures/{id}/refunds

      Where:
      • payments/{id} – GlobalPay Payment ID
      • splits/{id} – The ID of the split payment
      • captures/{id} – The ID of the captured payment

      When you are initiating a refund you need to provide the Refund Amount and the Merchant Transaction ID, that is automatically generated. You can change this ID by introducing your ID value.

      A 201 HTTP response (Created) is returned if the refund was correctly initialized.

      Request:

      POST https://securetest.smart2pay.com/v1/payments/428473/splits/446/captures/29035/refunds
      Authorization: Basic MTAxMDpnYWJp
      
      {
        "Refund": {
            "MerchantTransactionID": "s2p_test_refund1",
            "Amount": 60,
            "Description": "refund for x",
            "StatementDescriptor": "refund for product X",
            "OriginatorTransactionID": "34991440-A"
        }
      }

      Response:

      HTTP/1.1 201 Created
      Content-Type: application/json; charset=utf-8
      
      {
          "Refund": {
              "ID": 23742,
              "SiteID": 66789,
              "Created": "20200702143342",
              "MerchantTransactionID": "s2p_test_refund1",
              "OriginatorTransactionID": "34991440-A",
              "InitialPaymentID": 428473,
              "SplitID": 446,
              "Amount": "60",
              "Currency": "EUR",
              "Description": "refund for x",
              "StatementDescriptor": "refund for product X",
              "Customer": null,
              "BillingAddress": null,
              "BankAddress": null,
              "Articles": null,
              "Status": {
                  "ID": 2,
                  "Info": "Success",
                  "Reasons": []
              },
              "MethodTransactionID": "196244198"
          }
      }

    4. Cancel a full payment

      Definition: POST /v1/payments/{id}/cancel

      Where:
      • {id} – GlobalPay Payment ID

      A payment can be cancelled if it has an Authorized or an Open status. Only the full payment with an Authorized status will support cancellation. If one of its splits payments has been previously captured, the payment changed its status in PartiallyCaptured so it will no longer support cancellation.

      A 200 HTTP response (OK) is returned if the request was completed successfully.

      POST https://securetest.smart2pay.com/v1/payments/428480/cancel
      Authorization: Basic MTAxMDpnYWJp

      Response:

      HTTP/1.1 200 OK
      Content-Type: application/json; charset=utf-8
      
      {
          "Payment": {
              "ID": 428480,
              "ClientIP": "82.208.151.136",
              "SkinID": null,
              "Created": "20200702145229",
              "MerchantTransactionID": "s2p_test1c",
              "OriginatorTransactionID": "34991440",
              "Amount": "100",
              "Currency": "EUR",
              "CapturedAmount": "0",
              "ReturnURL": "http://demo.smart2pay.com/redirect.php",
              "Description": "Split Payment test",
              "StatementDescriptor": "card payment",
              "MethodID": 6,
              "MethodOptionID": null,
              "SiteID": 66789,
              "NotificationDateTime": null,
              "Customer": null,
              "BillingAddress": null,
              "ShippingAddress": null,
              "Articles": null,
              "Card": {
                  "HolderName": "Johnn Snow",
                  "Number": "Visa-2535",
                  "ExpirationMonth": "12",
                  "ExpirationYear": "2023"
              },
              "CreditCardToken": null,
              "Status": {
                  "ID": 3,
                  "Info": "Cancelled",
                  "Reasons": []
              },
              "MethodTransactionID": null,
              "AuthorizationCode": "111738",
              "PaymentTokenLifetime": null,
              "Capture": false,
              "CaptureDetails": null,
              "Retry": false,
              "RedirectURL": null,
              "3DSecure": false,
              "3DSecureData": null,
              "DeviceInfo": null,
              "ScaExemption": null,
              "CardOnFile": null,
              "Fraud": null,
              "AddressVerification": null,
              "Splits": [
                  {
                      "ID": 449,
                      "PaymentID": 428480,
                      "SiteID": 1000,
                      "MerchantTransactionID": "s2p_test1123",
                      "OriginatorTransactionID": "34991440-A",
                      "Created": "20200702145229",
                      "Amount": "60",
                      "Currency": "EUR",
                      "CapturedAmount": "0",
                      "StateDetails": {
                          "ID": 3,
                          "Info": "Cancelled",
                          "Reasons": []
                      }
                  },
                  {
                      "ID": 450,
                      "PaymentID": 428480,
                      "SiteID": 1061,
                      "MerchantTransactionID": "s2p_test1244",
                      "OriginatorTransactionID": "34991440-B",
                      "Created": "20200702145229",
                      "Amount": "40",
                      "Currency": "EUR",
                      "CapturedAmount": "0",
                      "StateDetails": {
                          "ID": 3,
                          "Info": "Cancelled",
                          "Reasons": []
                      }
                  }
              ]
          }
      }

    Dana Recurring Payment

    Definition: POST /v1/payments/recurrent

    A recurring payment is created in the same manner a one-off payment is created. In addition, you need to send the PreapprovalID (the PreapprovalID received when you created/opened a preapproval) and the information specific to each payment method.

    For Dana (1136), you need to send the PreapprovalID (the PreapprovalID received when you created/opened a preapproval) and the Amount to be captured.

    Checkout the below example of a recurring payment request for Dana (1136) that is based on the PreapprovalID. Please send in the payment request the Description parameter and Country parameter that should be the same with the ones sent in the Preapproval request.

    Request:

    POST https://paytest.smart2pay.com/v1/payments/recurrent
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Payment": {
        "PreapprovalID": 22265,
        "MerchantTransactionID": "reccuringPayin-DanaRecurrent",
        "Amount": 100,
        "Currency": "IDR",
        "MethodID": 1136,
        "Description": "recurring payment",
        "BillingAddress": {
          "Country": "ID"
        }
      }
    }
    

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Payment": {
            "ID": 4937474,
            "SkinID": null,
            "ClientIP": null,
            "Created": "20200330142936",
            "MerchantTransactionID": "reccuringPayin-DanaRecurrent",
            "OriginatorTransactionID": null,
            "Amount": "100",
            "Currency": "IDR",
            "CapturedAmount": null,
            "ReturnURL": null,
            "Description": "recurring payment",
            "MethodID": 1136,
            "MethodOptionID": null,
            "IncludeMethodIDs": null,
            "ExcludeMethodIDs": null,
            "PrioritizeMethodIDs": null,
            "SiteID": 30597,
            "NotificationDateTime": null,
            "Customer": null,
            "BillingAddress": {
                "ID": 657,
                "City": null,
                "ZipCode": null,
                "State": null,
                "Street": null,
                "StreetNumber": null,
                "HouseNumber": null,
                "HouseExtension": null,
                "Country": "ID"
            },
            "ShippingAddress": null,
            "Articles": null,
            "Details": null,
            "ReferenceDetails": null,
            "CustomParameters": null,
            "PreapprovalID": 22265,
            "Status": {
                "ID": 1,
                "Info": "Open",
                "Reasons": null
            },
            "Fraud": null,
            "MethodTransactionID": null,
            "TokenLifetime": null,
            "Capture": null,
            "PreapprovalDetails": null,
            "RedirectURL": null
        }
    }
    

    We will notify you about the new status of the payment to the Notification URL you setup in the Merchant Dashboard. The format of the received notification has the same structure as the response of the initial request.

    You need to respond with HTTP code 204 (No Content)!

    Payment notification format:

    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Payment": {
        "ID": 4937474,
        "SkinID": null,
        "ClientIP": null,
        "Created": "20200330142936",
        "MerchantTransactionID": "reccuringPayin-DanaRecurrent",
        "OriginatorTransactionID": null,
        "Amount": "100",
        "Currency": "IDR",
        "CapturedAmount": null,
        "ReturnURL": "",
        "Description": "recurring payment",
        "MethodID": 1136,
        "MethodOptionID": null,
        "IncludeMethodIDs": null,
        "ExcludeMethodIDs": null,
        "PrioritizeMethodIDs": null,
        "SiteID": 30597,
        "NotificationDateTime": null,
        "Customer": null,
        "BillingAddress": {
          "ID": 657,
          "City": null,
          "ZipCode": null,
          "State": null,
          "Street": null,
          "StreetNumber": null,
          "HouseNumber": null,
          "HouseExtension": null,
          "Country": "ID"
        },
        "ShippingAddress": null,
        "Articles": null,
        "Details": null,
        "ReferenceDetails": null,
        "CustomParameters": null,
        "PreapprovalID": 22265,
        "Status": {
          "ID": 2,
          "Info": "Success",
          "Reasons": null
        },
        "Fraud": null,
        "MethodTransactionID": null,
        "TokenLifetime": null,
        "Capture": null,
        "PreapprovalDetails": null,
        "RedirectURL": null
      }
    }
    

    Dana Preapproval Notification

    We will notify you about the new status of the preapproval to the Notification URL you setup in the Merchant Dashboard. The format of the received notification has the same structure as the response of the initial request.

    You need to respond with HTTP code 204 (No Content)!

    Preapproval notification format:

    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Preapproval": {
        "ID": 22265,
        "Created": "20200330142046",
        "MethodID": 1136,
        "SiteID": 30597,
        "MerchantPreapprovalID": "s2ptest_Dana_Preapproval",
        "RecurringPeriod": 0,
        "PreapprovedMaximumAmount": null,
        "Currency": null,
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "1 year subscription",
        "Customer": {
          "ID": 2622497,
          "MerchantCustomerID": null,
          "Email": "jdoe@gmail.com",
          "FirstName": "John",
          "LastName": "Doe",
          "Gender": null,
          "SocialSecurityNumber": null,
          "Phone": null,
          "Company": null,
          "DateOfBirth": null
        },
        "BillingAddress": {
          "ID": 657,
          "City": null,
          "ZipCode": null,
          "State": null,
          "Street": null,
          "StreetNumber": null,
          "HouseNumber": null,
          "HouseExtension": null,
          "Country": "ID"
        },
        "Status": {
          "ID": 2,
          "Info": null,
          "Reasons": null
        },
        "RedirectURL": null,
        "MethodOptionID": 0,
        "PreapprovedFrequency": null,
        "MandateReference": null,
        "Details": null
      }
    }
    

    Dana Preapproval Request

    Definition: POST /v1/preapprovals

    To initiate a preapproval, you must create a preapproval object. The parameters of the preapproval are sent in the message body as a JSON object. See below an example of a preapproval request for Dana (1136).

    Request:

    POST https://paytest.smart2pay.com/v1/preapprovals
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
     "Preapproval": {
       "MerchantPreapprovalID": "s2ptest_Dana_Preapproval",
       "Currency": "IDR",
       "Description": "1 year subscription",
       "ReturnURL": "http://demo.smart2pay.com/redirect.php",
       "MethodID": 1136,
       "Customer": {
          "FirstName": "John",
          "LastName": "Doe",
          "Email": "jdoe@gmail.com"
         },
       "BillingAddress": {
          "Country": "ID"
          }
       }
    }
    

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Preapproval": {
            "ID": 22265,
            "Created": "20200330142046",
            "MethodID": 1136,
            "SiteID": 30597,
            "MerchantPreapprovalID": "s2ptest_Dana_Preapproval",
            "RecurringPeriod": 0,
            "PreapprovedMaximumAmount": null,
            "Currency": "IDR",
            "ReturnURL": "http://demo.smart2pay.com/redirect.php",
            "Description": "1 year subscription",
            "Customer": {
                "ID": 2622497,
                "MerchantCustomerID": null,
                "Email": "jdoe@gmail.com",
                "FirstName": "John",
                "LastName": "Doe",
                "Gender": null,
                "SocialSecurityNumber": null,
                "Phone": null,
                "Company": null,
                "DateOfBirth": null
            },
            "BillingAddress": {
                "ID": 657,
                "City": null,
                "ZipCode": null,
                "State": null,
                "Street": null,
                "StreetNumber": null,
                "HouseNumber": null,
                "HouseExtension": null,
                "Country": "ID"
            },
            "Status": {
                "ID": 1,
                "Info": "Pending",
                "Reasons": null
            },
            "RedirectURL": "https://europaytest.smart2pay.com/AlipayOSP/Preapproval/PreapprovalLanding.aspx?ID=17588&Hash=E16F327FAA01E8292C6B90C650BDC4FD",
            "MethodOptionID": 0,
            "PreapprovedFrequency": null,
            "MandateReference": null,
            "Details": null
        }
    }
    

    Dana Preapproval Flow

    Dana Test Data
    Data Value
    Phone Number: Enter any 11 digit number. Example: 12345678123
    Verification Code: Enter any 6 digit number. Example: 123456
    PIN number: Enter any 6 digit number. Example: 123456
    1. The customer is redirected to Dana page. The customer needs to add their phone number attached to the Dana wallet.1 Add phone number
    2. The customer fills in the 5-digit code received via SMS.1 SMS digit code
    3. The customer enters the PIN number.1 SMS 6 digit code
    4. The customer confirms the auto-debit user agreement1 Confirm agreement

    KakaoPay Recurring Payment

    Definition: POST /v1/payments/recurrent

    A recurring payment is created in the same manner a one-off payment is created. In addition, you need to send the PreapprovalID (the PreapprovalID received when you created/opened a preapproval) and the information specific to each payment method.

    For KakaoPay (1135), you need to send the PreapprovalID (the PreapprovalID received when you created/opened a preapproval) and the Amount to be captured.

    Checkout the below example of a recurring payment request for KakaoPay (1135) that is based on the PreapprovalID. Please send in the payment request the Description parameter and Country parameter that should be the same with the ones sent in the Preapproval request.

    Request:

    POST https://paytest.smart2pay.com/v1/payments/recurrent
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Payment": {
        "PreapprovalID": 22276,
        "MerchantTransactionID": "reccuringPayin-GCashRecurrent526",
        "Amount": 100,
        "Currency": "KRW",
        "MethodID": 1135,
        "Description": "recurring payment",
        "BillingAddress": {
          "Country": "KR"
        } 
      }
    }
    

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Payment": {
            "ID": 4938078,
            "SkinID": null,
            "ClientIP": null,
            "Created": "20200331072856",
            "MerchantTransactionID": "reccuringPayin-GCashRecurrent526",
            "OriginatorTransactionID": null,
            "Amount": "100",
            "Currency": "KRW",
            "CapturedAmount": null,
            "ReturnURL": null,
            "Description": "recurring payment",
            "MethodID": 1135,
            "MethodOptionID": null,
            "IncludeMethodIDs": null,
            "ExcludeMethodIDs": null,
            "PrioritizeMethodIDs": null,
            "SiteID": 30597,
            "NotificationDateTime": null,
            "Customer": null,
            "BillingAddress": {
                "ID": 653,
                "City": null,
                "ZipCode": null,
                "State": null,
                "Street": null,
                "StreetNumber": null,
                "HouseNumber": null,
                "HouseExtension": null,
                "Country": "KR"
            },
            "ShippingAddress": null,
            "Articles": null,
            "Details": null,
            "ReferenceDetails": null,
            "CustomParameters": null,
            "PreapprovalID": 22276,
            "Status": {
                "ID": 1,
                "Info": "Open",
                "Reasons": null
            },
            "Fraud": null,
            "MethodTransactionID": null,
            "TokenLifetime": null,
            "Capture": null,
            "PreapprovalDetails": null,
            "RedirectURL": null
        }
    }
    

    We will notify you about the new status of the payment to the Notification URL you setup in the Merchant Dashboard. The format of the received notification has the same structure as the response of the initial request.

    You need to respond with HTTP code 204 (No Content)!

    Payment notification format:

    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Payment": {
        "ID": 4938078,
        "SkinID": null,
        "ClientIP": null,
        "Created": "20200331072856",
        "MerchantTransactionID": "reccuringPayin-GCashRecurrent526",
        "OriginatorTransactionID": null,
        "Amount": "100",
        "Currency": "KRW",
        "CapturedAmount": null,
        "ReturnURL": "",
        "Description": "recurring payment",
        "MethodID": 1135,
        "MethodOptionID": null,
        "IncludeMethodIDs": null,
        "ExcludeMethodIDs": null,
        "PrioritizeMethodIDs": null,
        "SiteID": 30597,
        "NotificationDateTime": null,
        "Customer": null,
        "BillingAddress": {
          "ID": 653,
          "City": null,
          "ZipCode": null,
          "State": null,
          "Street": null,
          "StreetNumber": null,
          "HouseNumber": null,
          "HouseExtension": null,
          "Country": "KR"
        },
        "ShippingAddress": null,
        "Articles": null,
        "Details": null,
        "ReferenceDetails": null,
        "CustomParameters": null,
        "PreapprovalID": 22276,
        "Status": {
          "ID": 2,
          "Info": "Success",
          "Reasons": null
        },
        "Fraud": null,
        "MethodTransactionID": null,
        "TokenLifetime": null,
        "Capture": null,
        "PreapprovalDetails": null,
        "RedirectURL": null
      }
    }
    

    KakaoPay Preapproval Notification

    We will notify you about the new status of the preapproval to the Notification URL you setup in the Merchant Dashboard. The format of the received notification has the same structure as the response of the initial request.

    You need to respond with HTTP code 204 (No Content)!

    Preapproval notification format:

    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Preapproval": {
        "ID": 22276,
        "Created": "20200331063928",
        "MethodID": 1135,
        "SiteID": 30597,
        "MerchantPreapprovalID": "s2ptest_kAKAOPAY_PreapprovalS1",
        "RecurringPeriod": 0,
        "PreapprovedMaximumAmount": null,
        "Currency": null,
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "1 year subscription",
        "Customer": {
          "ID": 2622497,
          "MerchantCustomerID": null,
          "Email": "jdoe@gmail.com",
          "FirstName": "John",
          "LastName": "Doe",
          "Gender": null,
          "SocialSecurityNumber": null,
          "Phone": null,
          "Company": null,
          "DateOfBirth": null
        },
        "BillingAddress": {
          "ID": 657,
          "City": null,
          "ZipCode": null,
          "State": null,
          "Street": null,
          "StreetNumber": null,
          "HouseNumber": null,
          "HouseExtension": null,
          "Country": "ID"
        },
        "Status": {
          "ID": 2,
          "Info": null,
          "Reasons": null
        },
        "RedirectURL": null,
        "MethodOptionID": 0,
        "PreapprovedFrequency": null,
        "MandateReference": null,
        "Details": null
      }
    }

    KakaoPay Preapproval Request

    Definition: POST /v1/preapprovals

    To initiate a preapproval, you must create a preapproval object. The parameters of the preapproval are sent in the message body as a JSON object. See below an example of a preapproval request for KakaoPay (1135).

    Request:

    POST https://paytest.smart2pay.com/v1/preapprovals
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
     "Preapproval": {
       "MerchantPreapprovalID": "s2ptest_kAKAOPAY_PreapprovalS1",
       "Currency": "KRW",
       "Description": "1 year subscription",
       "ReturnURL": "http://demo.smart2pay.com/redirect.php",
       "MethodID": 1135,
       "Customer": {
          "FirstName": "John",
          "LastName": "Doe",
          "Email": "jdoe@gmail.com"
         },
       "BillingAddress": {
          "Country": "KR"
          }
       }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Preapproval": {
            "ID": 22276,
            "Created": "20200331063928",
            "MethodID": 1135,
            "SiteID": 30597,
            "MerchantPreapprovalID": "s2ptest_kAKAOPAY_PreapprovalS1",
            "RecurringPeriod": 0,
            "PreapprovedMaximumAmount": null,
            "Currency": "KRW",
            "ReturnURL": "http://demo.smart2pay.com/redirect.php",
            "Description": "1 year subscription",
            "Customer": {
                "ID": 2622497,
                "MerchantCustomerID": null,
                "Email": "jdoe@gmail.com",
                "FirstName": "John",
                "LastName": "Doe",
                "Gender": null,
                "SocialSecurityNumber": null,
                "Phone": null,
                "Company": null,
                "DateOfBirth": null
            },
            "BillingAddress": {
                "ID": 657,
                "City": null,
                "ZipCode": null,
                "State": null,
                "Street": null,
                "StreetNumber": null,
                "HouseNumber": null,
                "HouseExtension": null,
                "Country": "KR"
            },
            "Status": {
                "ID": 1,
                "Info": "Pending",
                "Reasons": null
            },
            "RedirectURL": "https://europaytest.smart2pay.com/AlipayOSP/Preapproval/PreapprovalLanding.aspx?ID=17598&Hash=64B81EAA7FE00CB58E187BE0615CC7BD",
            "MethodOptionID": 0,
            "PreapprovedFrequency": null,
            "MandateReference": null,
            "Details": null
        }
    }

    Kakaopay Preapproval Flow

    1. The customer is redirected to KakaoPay page where the user needs to confirm the terms of the payment.1 Confirm payment
    2. The Customer fills in the 6-digit code received via SMS. For testing purposes, enter any 6 digit number.1 SMS 6 digit code
    3. The customer confirms the auto-debit user agreement1 Confirm agreement

    GCash Recurring Payment

    Definition: POST /v1/payments/recurrent

    A recurring payment is created in the same manner a one-off payment is created. In addition, you need to send the PreapprovalID (the PreapprovalID received when you created/opened a preapproval) and the information specific to each payment method.

    For GCash (1134), you need to send the PreapprovalID (the PreapprovalID received when you created/opened a preapproval) and the Amount to be captured.

    Checkout the below example of a recurring payment request for GCash (1134) that is based on the PreapprovalID. Please send in the payment request the Description parameter and Country parameter that should be the same with the ones sent in the Preapproval request.

    Request:

    POST https://paytest.smart2pay.com/v1/payments/recurrent
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Payment": {
        "PreapprovalID": 22256,
        "MerchantTransactionID": "reccuringPayina-AlipayOSP666",
        "Amount": 100,
        "Currency": "PHP",
        "MethodID": 1134,
        "Description": "recurring payment",
        "BillingAddress": {
        "Country": "PH"
        } 
      }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Payment": {
            "ID": 4936892,
            "SkinID": null,
            "ClientIP": null,
            "Created": "20200330102706",
            "MerchantTransactionID": "reccuringPayina-AlipayOSP666",
            "OriginatorTransactionID": null,
            "Amount": 100,
            "Currency": "PHP",
            "CapturedAmount": null,
            "ReturnURL": null,
            "Description": "recurring payment",
            "MethodID": 1134,
            "MethodOptionID": null,
            "IncludeMethodIDs": null,
            "ExcludeMethodIDs": null,
            "PrioritizeMethodIDs": null,
            "SiteID": 30597,
            "NotificationDateTime": null,
            "Customer": null,
            "BillingAddress": {
                "ID": 644,
                "City": null,
                "ZipCode": null,
                "State": null,
                "Street": null,
                "StreetNumber": null,
                "HouseNumber": null,
                "HouseExtension": null,
                "Country": "PH"
            },
            "ShippingAddress": null,
            "Articles": null,
            "Details": null,
            "ReferenceDetails": null,
            "CustomParameters": null,
            "PreapprovalID": 22256,
            "Status": {
                "ID": 1,
                "Info": "Open",
                "Reasons": null
            },
            "Fraud": null,
            "MethodTransactionID": null,
            "TokenLifetime": null,
            "Capture": null,
            "PreapprovalDetails": null,
            "RedirectURL": null
        }
    }

    We will notify you about the new status of the payment to the Notification URL you setup in the Merchant Dashboard. The format of the received notification has the same structure as the response of the initial request.

    You need to respond with HTTP code 204 (No Content)!

    Payment notification format:

    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Payment": {
        "ID": 4936892,
        "SkinID": null,
        "ClientIP": null,
        "Created": "20200330102706",
        "MerchantTransactionID": "reccuringPayina-AlipayOSP666",
        "OriginatorTransactionID": null,
        "Amount": 100,
        "Currency": "PHP",
        "CapturedAmount": null,
        "ReturnURL": "",
        "Description": "recurring payment",
        "MethodID": 1134,
        "MethodOptionID": null,
        "IncludeMethodIDs": null,
        "ExcludeMethodIDs": null,
        "PrioritizeMethodIDs": null,
        "SiteID": 30597,
        "NotificationDateTime": null,
        "Customer": null,
        "BillingAddress": {
          "ID": 644,
          "City": null,
          "ZipCode": null,
          "State": null,
          "Street": null,
          "StreetNumber": null,
          "HouseNumber": null,
          "HouseExtension": null,
          "Country": "PH"
        },
        "ShippingAddress": null,
        "Articles": null,
        "Details": null,
        "ReferenceDetails": null,
        "CustomParameters": null,
        "PreapprovalID": 22256,
        "Status": {
          "ID": 2,
          "Info": "Success",
          "Reasons": null
        },
        "Fraud": null,
        "MethodTransactionID": null,
        "TokenLifetime": null,
        "Capture": null,
        "PreapprovalDetails": null,
        "RedirectURL": null
      }
    }

    GCash Preapproval Notification

    We will notify you about the new status of the preapproval to the Notification URL you setup in the Merchant Dashboard. The format of the received notification has the same structure as the response of the initial request.

    You need to respond with HTTP code 204 (No Content)!

    Preapproval notification format:

    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Preapproval": {
        "ID": 22256,
        "Created": "20200330101451",
        "MethodID": 1134,
        "SiteID": 30597,
        "MerchantPreapprovalID": "s2ptest_h-1test52",
        "RecurringPeriod": 0,
        "PreapprovedMaximumAmount": null,
        "Currency": null,
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "1 year subscription",
        "Customer": {
          "ID": 2622497,
          "MerchantCustomerID": null,
          "Email": "jdoe@gmail.com",
          "FirstName": "John",
          "LastName": "Doe",
          "Gender": null,
          "SocialSecurityNumber": null,
          "Phone": null,
          "Company": null,
          "DateOfBirth": null
        },
        "BillingAddress": {
          "ID": 644,
          "City": null,
          "ZipCode": null,
          "State": null,
          "Street": null,
          "StreetNumber": null,
          "HouseNumber": null,
          "HouseExtension": null,
          "Country": "PH"
        },
        "Status": {
          "ID": 2,
          "Info": null,
          "Reasons": null
        },
        "RedirectURL": null,
        "MethodOptionID": 0,
        "PreapprovedFrequency": null,
        "MandateReference": null,
        "Details": null
      }
    }

    GCash Preapproval Request

    Definition: POST /v1/preapprovals

    To initiate a preapproval, you must create a preapproval object. The parameters of the preapproval are sent in the message body as a JSON object. See below an example of a preapproval request for GCash (1134).

    With GCash, you can create preapprovals that can allow you to form subsequent recurrent payments. This is the most flexible type and allows the merchant to fully control when to initiate the money transfer(s) between the end user’s account and the merchant’s account (credits or debits). The Preapproval call basically creates a transaction representing the end user’s authorization to use their account for payments on the terms set in the request.

    A transaction ID is returned to the merchant within the return URL in the Preapproval response/notification. The merchant must store this transaction ID in the end user’s payment profile to allow future recurrent requests.
    This ID is active for 2 years and then the token that allows subsequent recurrent payments will be automatically refreshed after this time period.

    Request:

    POST https://paytest.smart2pay.com/v1/preapprovals
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
     "Preapproval": {
       "MerchantPreapprovalID": "s2ptest_h-1test52",
       "Currency": "PHP",
       "Description": "1 year subscription",
       "ReturnURL": "http://demo.smart2pay.com/redirect.php",
       "MethodID": 1134,
       "Customer": {
          "FirstName": "John",
          "LastName": "Doe",
          "Email": "jdoe@gmail.com"
         },
       "BillingAddress": {
          "Country": "PH"
          }
       }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Preapproval": {
            "ID": 22256,
            "Created": "20200330101451",
            "MethodID": 1134,
            "SiteID": 30597,
            "MerchantPreapprovalID": "s2ptest_h-1test52",
            "RecurringPeriod": 0,
            "PreapprovedMaximumAmount": null,
            "Currency": "PHP",
            "ReturnURL": "http://demo.smart2pay.com/redirect.php",
            "Description": "1 year subscription",
            "Customer": {
                "ID": 2622497,
                "MerchantCustomerID": null,
                "Email": "jdoe@gmail.com",
                "FirstName": "John",
                "LastName": "Doe",
                "Gender": null,
                "SocialSecurityNumber": null,
                "Phone": null,
                "Company": null,
                "DateOfBirth": null
            },
            "BillingAddress": {
                "ID": 644,
                "City": null,
                "ZipCode": null,
                "State": null,
                "Street": null,
                "StreetNumber": null,
                "HouseNumber": null,
                "HouseExtension": null,
                "Country": "PH"
            },
            "Status": {
                "ID": 1,
                "Info": "Pending",
                "Reasons": null
            },
            "RedirectURL": "https://europaytest.smart2pay.com/AlipayOSP/Preapproval/PreapprovalLanding.aspx?ID=17580&Hash=FC11CEC58D39D2966F2B71603EBA8726",
            "MethodOptionID": 0,
            "PreapprovedFrequency": null,
            "MandateReference": null,
            "Details": null
        }
    }

    GCash Preapproval Flow

    GCash Test Data
    Data Value
    Phone Number: Enter any 10 digit number. Example: 1234567812
    Authentication Code: Enter any 6 digit number. Example: 123456
    PIN Number: Enter any 4 digit number. Example: 1234
    1. The Customer enters his mobile phone number.1 Enter phone
    2. The Customer enters the authentication code that was send to his mobile phone number.1 Enter Authentication Code
    3. The customer logs in to his GCash account by entering his PIN number.1 Account login
    4. The customer reviews the details and confirms the preapproval.1 Payment password
    5. Upon completion of the payment flow, the customer is redirected to your ReturnUrl.1 Return page when the redirection status is processing

    Dana Test Data

    In order for you to test the Dana payment method successfully, please use the below test data.

    Dana Test Data
    Data Value
    Phone Number: Enter any 11 digit number. Example: 12345678123
    PIN number: Enter any 6 digit number. Example: 123456

    Dana Payment Flow

    1. The customer is redirected to Dana page where he needs to add his phone number.

      1 Phone number

    2. The customer needs to enter the PIN number.

      1 PIN number confirmation

    3. The customer sees the payment details and confirms the payment.

      1 Payment confirmation

    4. The customer receives a message confirmation of the payment.

      1 Payment confirmation

    5. Upon completion of the payment flow, the customer is redirected to your ReturnUrl.

      1 Return page when the redirection status is a success

    GCash Test Data

    In order for you to test the GCash payment method successfully, please use the below test data.

    GCash Test Data
    Data Value
    Phone Number: Enter any 10 digit number. Example: 1234567812
    Authentication code: Enter any 6 digit number. Example: 123456
    PIN number: Enter any 4 digit number. Example: 1234

    GCash Payment Flow

    1. The Customer enters his mobile phone number.

      1 Enter phone

    2. The Customer enters the authentication code that was send to his mobile phone number.

      1 Enter Authentication Code

    3. The customer logs in to his GCash account by entering his PIN number.

      1 Account login

    4. The customer reviews the payment details and confirms the payment.

      1 Payment password

    5. Upon completion of the payment flow, the customer is redirected to your ReturnUrl.

      1 Return page when the redirection status is processing

    Servipag Pago Flujo

    Para el método de pago de Servipag no hay datos de prueba disponibles, pero puede ver cómo funciona con el flujo de pago que figura a continuación.

    Servipag Pago Flujo

    1. El cliente ingresa su dirección de correo electrónico, nombre y RUT. Tenga en cuenta que para Chile el parámetro Número de seguridad social del cliente consiste en RUT. Para obtener más información sobre el RUT, haga clic aquí.

      1 Enter customer details

    2. El cliente recibe los detalles de pago imprimibles. Necesita pagar la cantidad exacta en cualquier sucursal de Servipag en su área.

      ¡Tenga en cuenta la fecha de vencimiento impresa en el boleto para completar el pago antes de que expire el boleto!

      1 Payment details

    3. Al completar el flujo de pago, el cliente es redirigido de nuevo a su ReturnURL.

      1 Return page when the redirection status is Processing

    Reporting process for Mirakl Marketplace

    1. Nuvei generates a daily transactional report file for Mirakl. The transactional report file contains the following information:
      ID
      ID
      Definition
      The ID of the transaction in Smart2Pay system
      Type
      int
      : The ID of the transaction in Nuvei system;
      MerchantTransactionID
      MerchantTransactionID
      Definition
      Merchant Transaction ID, a number that uniquely identifies a transaction in your system.
      Type
      string
      : Merchant Transaction ID, a number that uniquely identifies a transaction in your system;
      OriginatorTransactionID
      OriginatorTransactionID
      Definition
      The ID of the transaction/refund in The Marketplace system
      Type
      string
      : The ID of the transaction/refund in The Marketplace system;

      InputDateTime
      InputDateTime
      Definition
      The date and time of inserting the transaction in Smart2Pay system
      Type
      datetime
      : The date and time of inserting the transaction in Nuvei system;

      PaymentStateDefID
      PaymentStateDefID
      Definition
      The ID of the payment status in Smart2Pay system. It can have the following values: 1 - Open, 2 - Success, 3 - Cancelled, 4 - Failed, 5 - Expired, 9 - Authorized, 11 - Captured.
      : The status id of the transaction in Nuvei system;

      Status
      Status
      Definition
      The description of the transaction status in the Smart2Pay system: Open (Pending), Success (not used for card payments), Cancelled, Failed, Expired, Authorized, Captured.
      : The description of the transaction status in the Nuvei system;

      MerchantAmount
      MerchantAmount
      Definition
      The amount of the transaction.
      Type
      float
      : The amount of the transaction;

      MerchantCurrency
      MerchantCurrency
      Definition
      The currency of the transaction. ISO 4217 format (e.g. EUR)
      : The currency of the transaction;

      CapturedAmount
      CapturedAmount
      Definition
      The amount that has been captured. Float with 2 decimals (e.g. 33.99)
      Type
      float
      : The amount that has been captured;

      MethodID
      MethodID
      Definition
      The ID of the payment methods used. For credit cards payments the ID is 6.
      Type
      int
      : The ID of the payment methods used. For credit cards payments this is 6.;

      MethodName
      MethodName
      Definition
      The name of the payment method used: SmartCards.
      : The name of the payment method used.;

      ReportedByBOTOperatorDate
      ReportedByBOTOperatorDate
      Definition
      The date when the transaction was exported to CSV file.
      Type
      datetime
      : The date when the transaction was exported to csv file;

      SpecificDetails
      SpecificDetails
      Definition
      Specific Details
      : Not used;

      ReconciliationProviderID
      ReconciliationProviderID
      Definition
      The ID that appears on the bank statement of the customer (usually same as RootProviderTransactionID).
      Type
      string
      : ID appearing on the bank statement of the customer (usually same as RootProviderTransactionID);

      ProviderTransactionID
      ProviderTransactionID
      Definition
      Provider Transaction ID
      : Not used for card payments;

      MerchantAlias
      MerchantAlias
      Definition
      The name of the Shop.
      Type
      string
      : Shop Name;

      RootProviderTransactionID
      RootProviderTransactionID
      Definition
      The ID of the payment in acquiring system.
      Type
      string
      : ID of the payment in acquiring system;

      Country
      Country
      Definition
      The country of the payer if available. ISO_3166-1_alpha-2 format. (e.g. IT).
      : The country of the payer if available.
    2.  

    3. Nuvei will generate a Settlement invoice report containing information at transaction level for each shop. The Settlement invoice report contains the following information:1 Settlement invoice report per shop
      GPaymentId
      GPaymentId
      Definition
      GPaymentId
      : Not used;
      PaymentId
      PaymentId
      Definition
      The ID of the payment in Smart2Pay system.
      Type
      int
      : PaymentID in Nuvei system;

      Type
      Type
      Definition
      Transaction Type. It can be type: Payment, Refund, Inquiry or Chargeback.
      Type
      string
      : Transaction Type. Can be Payment, Refund, Inquiry or Chargeback;

      PaymentMethodName
      PaymentMethodName
      Definition
      The name of the payment method used. E.g. SmartCards
      Type
      string
      : Name of the payment method used;

      CustomerName
      CustomerName
      Definition
      The name of the customer, if available.
      Type
      string
      : The name of the customer, if available;

      MerchantName
      MerchantName
      Definition
      The name of the merchant account.
      Type
      string
      : The name of the merchant account;

      MerchantID
      MerchantID
      Definition
      The ID of the transaction/refund in your system.
      Type
      string
      : The transaction/refund id in your system;

      GtId
      GtId
      Definition
      GtId
      : Not used;

      IssuerName
      IssuerName
      Definition
      Issuer Name
      : Not used;

      IdealTrxId
      IdealTrxId
      Definition
      IdealTrxId
      : Not used;

      Country
      Country
      Definition
      The country of the payer, if available. ISO_3166-1_alpha-2 format. (e.g. IT).
      : The country of the payer, if available;

      InputDateTime
      InputDateTime
      Definition
      The date and time of inserting the transaction in Smart2Pay system.
      Type
      datetime
      : The date and time of inserting the transaction in Nuvei system;

      Amount
      Amount
      Definition
      The amount of the transaction.
      Type
      float
      : The amount of the transaction;

      Currency
      Currency
      Definition
      The currency of the transaction. ISO 4217 format (e.g. EUR).
      : The currency of the transaction;

      Status
      Status
      Definition
      The description of the transaction status in the Smart2Pay system: Open (Pending), Success (not used for card payments), Cancelled, Failed, Authorized, Captured
      : The description of the transaction status in the Nuvei system;

      ExchangeRate
      ExchangeRate
      Definition
      The exchange rate if the transaction needs to be converted from transaction currency to the settlement currency.
      Type
      float
      : The exchange rate if the transaction needs to be converted from transaction currency to the settlement currency;

      CalculatedAmount
      CalculatedAmount
      Definition
      The transaction amount converted to the settlement currency.
      Type
      float
      : The transaction amount converted to the settlement currency;

      ReferenceCurrency
      ReferenceCurrency
      Definition
      The settlement currency.
      Type
      float
      : The settlement currency;

      TransactionFee
      TransactionFee
      Definition
      Gateway fee (if applies).
      Type
      float
      : Gateway fee (if applies);

      GeneralFee
      GeneralFee
      Definition
      Gateway fee (if applies)
      Type
      float
      : Gateway fee (if applies);

      AttemptFee
      AttemptFee
      Definition
      Gateway fee (per attempt, if applies).
      Type
      float
      : Gateway fee (per attempt, if applies);

      IssuedFee
      IssuedFee
      Definition
      Gateway fee (per acquiring bank/payment method provider attempt fee if applies).
      Type
      float
      : Gateway fee (per acquiring bank/payment method provider attempt fee if applies);

      LocalVatFee
      LocalVatFee
      Definition
      Local payment method VAT (if applies).
      Type
      float
      : Local payment method VAT (if applies);

      VAT
      VAT
      Definition
      Value added tax (if applies).
      Type
      float
      : Value added tax (if applies);

      Comission
      Comission
      Definition
      Commission of the marketplace/agent (if applies).
      Type
      float
      : Commission of the marketplace/agent (if applies);

      SiteID
      SiteID
      Definition
      The ID of the shop.
      Type
      int
      : ID of the shop;

      SiteAlias
      SiteAlias
      Definition
      Shop Alias.
      Type
      string
      : Shop Alias;

      OriginatorTransactionID
      OriginatorTransactionID
      Definition
      The ID of the transaction/refund in The Marketplace system.
      Type
      string
      : The ID of the transaction/refund in The Marketplace system.
    4.  

    5. Nuvei will also generate an aggregated Settlement invoice report containing information at transaction level for the Marketplace. Settlement of the commission will be based on this settlement invoice. Format is the same as in the Settlement invoice report above.

    Below there are examples of Settlement invoice reports in all supported formats:

    Settlement Flow for Mirakl Marketplace

    Settlement cycles are defined in Nuvei system. Based on this, Nuvei generates settlement invoices for each shop. Also, Nuvei generates a commission settlement invoice for Mirakl Marketplace.

    The acquiring banks and alternative payment method providers settle to Nuvei the Gross amount – Acquiring/Processing Fees:

    • Nuvei settles gross amount – operator commission – acquiring fees to each shop. Settlement frequency: weekly. If a different settlement frequency is needed, please contact your Nuvei account manager.
    • Nuvei settles commission to Mirakl Marketplace based on Transaction Log API exposed by the Mirakl. Settlement frequency: weekly. If a different settlement frequency is needed, please contact your Nuvei account manager.

    Optional functionalities:

    • Subscription fee can be collected by Nuvei from the shops on behalf of the marketplace operator.
    • Manual credits / debits can be issued towards the shops by the Marketplace operator using Mirakl backoffice and will be performed by Smart2Pay.
    • Mirakl Marketplace can withhold the payment of certain transactions towards the shop (e.g. only the transactions with PaymentStatus marked as PAID will be settled).

    Reconciliation process for Mirakl Marketplace

    Nuvei reconciles at transaction level with the acquiring banks and alternative method providers.

    The SiteID / APIKEY will be used to initiate the transactions towards Smart2Pay. The Mirakl Marketplace Transaction ID needs to be submitted by Nuvei REST API in the OriginatorTransactionID field for reporting and reconciliation purposes towards the shops / Mirakl Marketplace.

    Transactional Flow for Mirakl Marketplace

    Orders containing items from multiple shops will be sent for authorization in multiple transactions, each transaction containing items for a single shop.

    Credit card transactions are authorized and their status is communicated on the following route: Acquirer -> Nuvei -> Mirakl Marketplace.

    Transactions should be captured within 7 days from authorization. For more information regarding capturing payments, please go to our section: Capture a Payment.

    Tokenization, 3D and fraud prevention solutions are available upon request. For more information visit: Credit Card Payments.

    Alternative payment methods are authorized and captured in one step and their status is communicated on the following route: Payment method provider -> Nuvei -> Mirakl Marketplace.

    You need to integrate our REST API described here: https://docs-apm.nuvei.com.

    Mirakl’s Pre-Settlement Transaction API

    Mirakl Marketplace exposes a Transaction Log API based on which Nuvei settles commissions for. Information about all the transactions created or updated within a certain interval can be retrieved by using an action based on GET HTTP request. The response will contain a transaction list in JSON format that returns all the transactions that were created or updated in the interval start_date – end_date.

    Only a limited amount of details for each transaction will be provided.

    Definition: GET /api/transactions_logs?shop_id=…&start_date=…&end_date=…&start_transaction_date=…&e
    nd_transaction_date=…&updated_since=…&payment_voucher=…&payment_states=…&transactio
    n_types=…&paginate=…&accounting_document_number=…&order_ids=…&order_line_ids=…

    Where:
    • shop_id – [optional] shop id for filtering;
    • start_date – [optional] creation date for filtering. Format: “yyyy-MM-dd’T’HH:mm:ss”;
    • end_date – [optional] creation date for filtering. Format: “yyyy-MM-dd’T’HH:mm:ss”;
    • start_transaction_date – [optional] transaction date for filtering. Format: “yyyy-MM-dd’T’HH:mm:ss”;
    • end_transaction_date – [optional] transaction date for filtering. Format: “yyyy-MM-dd’T’HH:mm:ss”;
    • updated_since – [optional] last updated date for filtering. Format: “yyyy-MM-dd’T’HH:mm:ss”;
    • payment_voucher – [optional] payment voucher number for filtering;
    • payment_states – [optional] payment states separated by comma for filtering;
    • transaction_types – [optional] transaction types separated by comma for filtering;
    • paginate – [optional] Control the pagination usage. Default: true;
    • accounting_document_number – [optional] an accounting document number for filtering (invoice or credit note number);
    • order_ids – [optional] order id list for filtering, using comma (,) as a separator;
    • order_line_ids – [optional] order line id list for filtering, using comma (,) as a separator.

    Request Model:

    GET /v1/transactions?{start_date}&{end_date}
    Authorization: Basic Pre-shared-APIKEY

    The transaction_type field contains the following information:

    • COMMISSION_VAT
    • COMMISSION_FEE
    • ORDER_SHIPPING_AMOUNT
    • ORDER_AMOUNT
    • MANUAL_CREDIT
    • MANUAL_CREDIT_VAT
    • ORDER_AMOUNT_TAX
    • ORDER_SHIPPING_AMOUNT_TAX
    • REFUND_ORDER_AMOUNT
    • REFUND_ORDER_SHIPPING_AMOUNT
    • REFUND_COMMISSION_FEE
    • REFUND_COMMISSION_VAT
    • REFUND_ORDER_AMOUNT_TAX
    • REFUND_ORDER_SHIPPING_AMOUNT_TAX
    • SUBSCRIPTION_FEE
    • SUBSCRIPTION_VAT

    Only the transactions with payment_state = “PAID” will be settled in the current settlement cycle.

    Mirakl Notification for Shop Approval

    Whenever a shop is approved in Nuvei onboarding system, a notification is sent from Nuvei to Mirakl Marketplace where the following info is send, and whether it was successful or not.

    Mirakl Marketplace needs to respond with HTTP return code 204 (No Content) otherwise the approval will be resubmitted!

    Definition: POST /api/shop/{ID}/notification

    Where:
    • {ID} – ID of the shop

    Shop Approval Notification Format:

    {
        "merchant_site": {
            "shop_id": Int,
            "site_id": Int (eg. 31261),
            "api_key": "SmasdsPx6n2KJU9MNKcBdlqdLJZOXSl9IA/kdksjSsdDWD",
            "created": "Date (yyyy-mm-dd hh:mm:ss, eg. 2018-12-31 23:59:59)",
            "url": "http://www.johnshop.it",
        }
    }
    
    

    Response:

    204 No Content

    We recommend you to always verify the Notification content we sent and not just simply/automatically respond to our notifications.

    In exceptional cases it is possible to receive duplicate notifications and your system should be able to handle such situations.

    If you do not respond to the notifications of type Approval or our system will keep sending the notifications until it receives a response!

    Get the List of Documents from Mirakl Marketplace

    Information about the required documents can be retrieved by using an action based on GET HTTP request. The response will contain a list of documents provided for each Shop ID in JSON format.

    Definition: GET /api/shops/documents?shop_ids=…

    Where:
    • shop_ids – [required] A list of shop identifiers.

    Request Model:

    GET /api/shops/{shop_id}/documents
    Authorization: Basic Pre-shared-APIKEY

    The following documents are required by Nuvei KYC platform:

    1. Bank statement (Not older than 6 months, with account holder and IBAN code visible);
    2. Company certificate / Incorporation certificate (Not older than 6 months);
    3. Register of directors (or any other document showing the company’s legal representatives) (Not older than 6 months);
    4. Passport copy of company’s legal representatives and UBO (Ultimate Beneficial Owners – all natural persons that own or control, directly or indirectly more than 25% of the Company): Legible ID copy in color within validity period;
    5. Take into consideration that for each of the company UBOs that own or control more than 25% of the company you must also provide proper identity documents (Legible ID copy in color within validity period)!

    6. Utility bill that can be used as proof of address for company’s legal representatives (Not older than 6 months).

    Get the List of Shops from Mirakl Marketplace

    Mirakl Marketplace Platform exposes an API which Nuvei can call to pull the list of newly created shops, using an action based on GET HTTP request. The response will contain a shop list in JSON format that returns all the shops that were created or updated after last_updated_date

    Only a limited amount of details for each shop will be provided.

    Definition: GET /api/shops?shop_ids=…&premium=…&state=…&updated_since=…&paginate=…

    Where:
    • shop_ids – List of shop ids separated with comma. Limited to 100 values;
    • premium – Boolean : “ALL” (default), “FALSE” or “TRUE”. If TRUE (FALSE) returns only offers of premium (not premium) shop;
    • state – State of the shop;
    • updated_since – Filter all the shop that have been modified since the value of this parameter;
    • paginate – [optional] Control the pagination usage. Default : true.

    Request Model:

    GET /api/shops/{last_updated_date}
    Authorization: Basic Pre-shared-APIKEY

    Not all fields are mandatory in the above request! If Mirakl Marketplace does not provide all the necessary data, the shop representative will fill the missing fields in Nuvei platform. Another method of providing missing or incomplete data is by adding it in the additional fields and document fields in your Mirakl back office, if the initial configuration allows you to.

    Once Nuvei identifies a newly created shop, it creates an account in Nuvei KYC platform for the shop representative and sends an email asking to finalize the application (e.g. fill missing info, upload documents, sign the online contract).

    Company Documents

    After you have completed all the necessary details for the company profile, you need to wait for Smart2pay approval of the company. After our team will review and approve your company details and documents, you will receive a confirmation message. Your company will be activated and you may start in completing the technical integration, that will get you closer to a full integration of your site with our platform.

    Go to Company documents tab where you will see all the required documents that you need to provide us in order for us to generate your merchant agreement.

    The documents that you necessarily need to provide us are the following: Bank statement, Company Certificate of Registration, Company extract showing who the company directors and legal representative(s) are, Utility bill that can be used as proof of address of the company and Passport copy of the UBOs> 25% and of the Legal Representative(s) signing the Merchant Agreement and the Merchant Form(s). In case there are any other documents not covered by the above document requirements, you may upload them at point 6 in the form.

    Once you uploaded the documents, you can click on the Submit Documents button and wait for our team to review and approve the documents that you have sent.

    If our team, while reviewing your documents, has agreed that you need to provide more information or the information is incomplete or outdated (like: expired passports or proof of address) they will reject your document. The reason will be stated in the form.

    You will also receive a rejection message in your Inbox message stating the reason of rejection.

    After resolving the issues involved in the rejection of the document, you will have to delete first the document from the Company Documents tab and then you will have to upload the newly modified document.

    You will also receive a message in your Inbox message stating which document has been deleted and the person who has deleted the document.

    After our team will review and approve the documents that you have sent, the Merchant agreement document is generated, in order to complete this step, all involved parties should accept it. The company representative that has the right to sign all company contracts will be notified via email in order to review and accept the merchant agreement.

    You will also receive a message in your Inbox message stating that the company representative that has the right to sign company contracts has been notified via email.

     

    Now that the company and all the documents have been approved and the merchant agreement has been accepted by all parties involved your company, your company will be approved. You will also receive your dashboard credentials and relevant API keys.

    Once your company is activated, you may start in completing the technical integration, that will get you closer to a full integration of your site with our platform.

    Messages

    In the Messages tab from the main menu you can see all your messages received or sent by you and you can send messages to our team concerning the different problems that you encounter.

    Through the Messages tab we offer our own messaging framework from within the program, to improve and facilitate the communication between us and our business partners. It is very useful because it displays all your notifications, keeps a track of your messages and you can always see the history of conversations between certain users and our team. Its a simple system to use and understand, it saves time with automated responses but it also manages all the conversations in the Inbox tab.

    When you access the Inbox tab, the search Filters section is collapsed. In order to expand it, just click on the Show filters. You can search messages depending on the sender and receiver. Once you enter the desired filters just click on the Filter button.

    Capture scenarios for Paypal

    Capture Scenarios Response Status Description Notification Status Description
    The transaction has been fully captured.

    Only payments with “Authorized” status (9) can be captured.
    Final Status: 2 Success Final Notification Status: 2 Success
    The payment has been partially captured.

    Only payments with “Authorized” status can be partially captured. The payment has been sent out to be partially captured, but the payment gateway has not yet confirmed that the payment is successful.
    Final Status: 35 Partially Captured Final Notification Status: 35 Partially Captured
    Capture Failed Scenarios Return Code Description
    The transaction could not be captured.

    The transaction is not in an Authorized status (it has already been fully Captured or Partially Captured).
    Return Code: 17 Payment is invalid

    For a complete list of all the possible Return Code IDs go to our section GlobalPay Return Codes.

    See the request – response examples for the above possible scenarios:

    • Success Status

      A payment can only be captured if it has an Authorized status. Once the payment has an Authorized status (9), you can capture either the full amount or a partial amount of the initial authorized amount for the transaction.

      A 200 HTTP response (OK) is returned if the request was completed successfully.

      Full capture means you capture the entire authorized amount for the initial transaction.

      Request:

      POST https://paytest.smart2pay.com/v1/payments/4813936/capture
      Authorization: Basic MzAxNTE6V05ydTJ5WnJpR2RtNVVMZWt4dFM4cHprUXNRSmdYYTZBZnlnT3FXZXcvNlRBYzNYK1A=

      Response:

      HTTP/1.1 200 OK
      Content-Type: application/json; charset=utf-8
      
      {
          "Payment": {
              "ID": 4813936,
              "SkinID": null,
              "ClientIP": null,
              "Created": "20191121152453",
              "MerchantTransactionID": "s2ptest_p1",
              "OriginatorTransactionID": null,
              "Amount": 100,
              "Currency": "EUR",
              "CapturedAmount": "100",
              "ReturnURL": "http://demo.smart2pay.com/redirect.php",
              "Description": null,
              "MethodID": 94,
              "MethodOptionID": null,
              "IncludeMethodIDs": null,
              "ExcludeMethodIDs": null,
              "PrioritizeMethodIDs": null,
              "SiteID": 30201,
              "NotificationDateTime": "20191121152731",
              "Customer": null,
              "BillingAddress": {
                  "ID": 452,
                  "City": null,
                  "ZipCode": null,
                  "State": null,
                  "Street": null,
                  "StreetNumber": null,
                  "HouseNumber": null,
                  "HouseExtension": null,
                  "Country": "ES"
              },
              "ShippingAddress": null,
              "Articles": null,
              "Details": null,
              "ReferenceDetails": null,
              "CustomParameters": null,
              "PreapprovalID": null,
              "Status": {
                  "ID": 2,
                  "Info": "Success",
                  "Reasons": null
              },
              "Fraud": null,
              "MethodTransactionID": null,
              "TokenLifetime": 10,
              "Capture": null,
              "PreapprovalDetails": null,
              "RedirectURL": "https://apitest.smart2pay.com/Home?PaymentToken=917D36F62AAA2BE344A324E612A0B5CC.4813936"
          }
      }

      We will notify you about the new status of the payment to the Notification URL you setup in the Merchant Dashboard. The format of the received notification has the same structure as the response of the initial request.

      You need to respond with HTTP code 204 (No Content)!

      Payment notification format:

      Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
      
      {
          "Payment": {
              "ID": 4813936,
              "SkinID": null,
              "ClientIP": null,
              "Created": "20191121152453",
              "MerchantTransactionID": "s2ptest_p1",
              "OriginatorTransactionID": null,
              "Amount": 100,
              "Currency": "EUR",
              "CapturedAmount": "100",
              "ReturnURL": "http://demo.smart2pay.com/redirect.php",
              "Description": null,
              "MethodID": 94,
              "MethodOptionID": null,
              "IncludeMethodIDs": null,
              "ExcludeMethodIDs": null,
              "PrioritizeMethodIDs": null,
              "SiteID": 30201,
              "NotificationDateTime": "20191121152731",
              "Customer": null,
              "BillingAddress": {
                  "ID": 452,
                  "City": null,
                  "ZipCode": null,
                  "State": null,
                  "Street": null,
                  "StreetNumber": null,
                  "HouseNumber": null,
                  "HouseExtension": null,
                  "Country": "ES"
              },
              "ShippingAddress": null,
              "Articles": null,
              "Details": null,
              "ReferenceDetails": null,
              "CustomParameters": null,
              "PreapprovalID": null,
              "Status": {
                  "ID": 2,
                  "Info": "Success",
                  "Reasons": null
              },
              "Fraud": null,
              "MethodTransactionID": null,
              "TokenLifetime": 10,
              "Capture": null,
              "PreapprovalDetails": null,
              "RedirectURL": "https://apitest.smart2pay.com/Home?PaymentToken=917D36F62AAA2BE344A324E612A0B5CC.4813936"
          }
      }

    • Partially Captured Status

      Partial capture means you have the possibility to capture a smaller amount than the one from the initial authorized transaction. Partial capture is used when you have sent at least part of the order to the consumer and want to capture the amount for the item(s) that have been shipped.

      You can perform only one partial capture for an authorized transaction with the limitation that the amount of the partial capture to be smaller or equal than the initial authorized amount.

      Specify only the captured amount parameter in the query string, in order to partially capture the payment, like in the below example:

      Request:

      POST https://paytest.smart2pay.com/v1/payments/4813937/capture?amount=50
      Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=

      Response:

      HTTP/1.1 200 OK
      Content-Type: application/json; charset=utf-8
      
      {
          "Payment": {
              "ID": 4813937,
              "SkinID": null,
              "ClientIP": null,
              "Created": "20191121153210",
              "MerchantTransactionID": "s2ptest_p2",
              "OriginatorTransactionID": null,
              "Amount": 100,
              "Currency": "EUR",
              "CapturedAmount": "50",
              "ReturnURL": "http://demo.smart2pay.com/redirect.php",
              "Description": null,
              "MethodID": 94,
              "MethodOptionID": null,
              "IncludeMethodIDs": null,
              "ExcludeMethodIDs": null,
              "PrioritizeMethodIDs": null,
              "SiteID": 30201,
              "NotificationDateTime": "20191121153324",
              "Customer": null,
              "BillingAddress": {
                  "ID": 452,
                  "City": null,
                  "ZipCode": null,
                  "State": null,
                  "Street": null,
                  "StreetNumber": null,
                  "HouseNumber": null,
                  "HouseExtension": null,
                  "Country": "ES"
              },
              "ShippingAddress": null,
              "Articles": null,
              "Details": null,
              "ReferenceDetails": null,
              "CustomParameters": null,
              "PreapprovalID": null,
              "Status": {
                  "ID": 35,
                  "Info": "PartiallyCaptured",
                  "Reasons": null
              },
              "Fraud": null,
              "MethodTransactionID": null,
              "TokenLifetime": 10,
              "Capture": null,
              "PreapprovalDetails": null,
              "RedirectURL": "https://apitest.smart2pay.com/Home?PaymentToken=387EE786392FE554A86CA9E3F3EF1E09.4813937"
          }
      }

      We will notify you about the new status of the payment to the Notification URL you setup in the Merchant Dashboard. The format of the received notification has the same structure as the response of the initial request.

      You need to respond with HTTP code 204 (No Content)!

      Payment notification format:

      Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk={
          "Payment": {
              "ID": 4813937,
              "SkinID": null,
              "ClientIP": null,
              "Created": "20191121153210",
              "MerchantTransactionID": "s2ptest_p2",
              "OriginatorTransactionID": null,
              "Amount": 100,
              "Currency": "EUR",
              "CapturedAmount": "50",
              "ReturnURL": "http://demo.smart2pay.com/redirect.php",
              "Description": null,
              "MethodID": 94,
              "MethodOptionID": null,
              "IncludeMethodIDs": null,
              "ExcludeMethodIDs": null,
              "PrioritizeMethodIDs": null,
              "SiteID": 30201,
              "NotificationDateTime": "20191121153324",
              "Customer": null,
              "BillingAddress": {
                  "ID": 452,
                  "City": null,
                  "ZipCode": null,
                  "State": null,
                  "Street": null,
                  "StreetNumber": null,
                  "HouseNumber": null,
                  "HouseExtension": null,
                  "Country": "ES"
              },
              "ShippingAddress": null,
              "Articles": null,
              "Details": null,
              "ReferenceDetails": null,
              "CustomParameters": null,
              "PreapprovalID": null,
              "Status": {
                  "ID": 35,
                  "Info": "PartiallyCaptured",
                  "Reasons": null
              },
              "Fraud": null,
              "MethodTransactionID": null,
              "TokenLifetime": 10,
              "Capture": null,
              "PreapprovalDetails": null,
              "RedirectURL": "https://apitest.smart2pay.com/Home?PaymentToken=387EE786392FE554A86CA9E3F3EF1E09.4813937"
          }
      }

    • Return Code: 17 – Payment is invalid

      The transaction could not be captured. The transaction is not in an Authorized status. You can receive this response when the payment you want to Capture is not Authorized or when the payment has already been Captured.

      Request:

      POST https://paytest.smart2pay.com/v1/payments/4813935/capture
      Authorization: Basic MzAxNTE6V05ydTJ5WnJpR2RtNVVMZWt4dFM4cHprUXNRSmdYYTZBZnlnT3FXZXcvNlRBYzNYK1A=

      Response:

      HTTP/1.1 400 Bad Request
      Content-Type: application/json; charset=utf-8{
          "Payment": {
              "ID": 4813935,
              "SkinID": null,
              "ClientIP": null,
              "Created": "20191121151256",
              "MerchantTransactionID": "s2ptest_paypal2",
              "OriginatorTransactionID": null,
              "Amount": "100",
              "Currency": "EUR",
              "CapturedAmount": null,
              "ReturnURL": "http://demo.smart2pay.com/redirect.php",
              "Description": null,
              "MethodID": 94,
              "MethodOptionID": null,
              "IncludeMethodIDs": null,
              "ExcludeMethodIDs": null,
              "PrioritizeMethodIDs": null,
              "SiteID": 30201,
              "NotificationDateTime": "20191121151441",
              "Customer": null,
              "BillingAddress": null,
              "ShippingAddress": null,
              "Articles": null,
              "Details": null,
              "ReferenceDetails": null,
              "CustomParameters": null,
              "PreapprovalID": null,
              "Status": {
                  "ID": 2,
                  "Info": "Success",
                  "Reasons": [
                      {
                          "Code": "17",
                          "Info": "Payment is invalid - 4813935"
                      }
                  ]
              },
              "Fraud": null,
              "MethodTransactionID": null,
              "TokenLifetime": null,
              "Capture": null,
              "PreapprovalDetails": null,
              "RedirectURL": null
          }
      }

    PayPal Test Data

    For PayPal payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    PayPal Payment Flow

    1. The Customer selects his preferred currency from the list and enters his email address.1 Enter email
    2. The customer logs in to his PayPal account by entering his email address and password.1 Account login
    3. The Customer reviews the payment information and confirms the payment.1 Payment details
    4. Upon completion of the payment flow the customer is redirected back to your ReturnURL.1 Return page when the redirection status is a success

    Company details

    The first part that needs to be covered for a successful onboarding at Nuvei is signing up your company! This section provides insights on how to successfully complete the Company Details form. Please keeep in mind, that all the fields are mandatory and we encourage you to give us the necessary information with utmost consideration!

    Access the OnBoarding platform by clicking on the Go button from the Company Details form in the Welcome Page.

    On the OnBoarding platform you will need to provide us with documentation requirements for customer and company, upload necessary company documents, accept the merchant agreement and request the company activation in order for your company to be approved and be ready to takle the live transactions.

    We’ll take step by step in filling all the necessary forms and you have the possibility to always check your boarding status in the Overview tab. Start by filling in the Company details form and provide as many details. Don’t forget to save the changes.

    In the Company tab you will need to provide us with documentation requirements for customer and company, like: Company details and address, Company contacts, Company bank details and also Stakeholders information.

    In the case that your business isn’t registered for VAT, in the EEC VAT Number filed you will click on the Not Applicable sign.

    In order for us to understand and to know more about your business and services, please provide as much information about your products or services in the Business Model field.

    If you have more than one website where you want to implement our services, you need to add each one of them by using the ADD ANOTHER SITE 26 button.

    In order to complete the Contact Details form, you will have to choose from one of the roles provided in the form: Financial Contact, Technical Contact or Support Contact, according to your role within the company. Click on the appropriate button and add the desired contact type.

    After choosing the specific role within the company, please provide the necessary details by which a person can contact you: first and last name and email address. For a more accurate and efective communication, you can give us more than one company contact.

    You will also need to provide the current headquarters address for your company, like: Street number, Postcode / Zipcode, City /State, Phone / Fax, and Country of establishment.

    In the Company Bank Details you will have to provide information related to your Bank, like: Bank Name, Account Holder, Account Currency, IBAN, Account Number and SWIFT. In case you dont’t have the complete information, please contact your Bank for a complete answer.

    The Stakeholders form must contain details of each Company Representative with signing rights or/and Ultimate Beneficial Owner that owns or controls, directly or indirectly more than 25% of the Company.

    Add a Company representative and fill in the necessary information, like: their signing right (click only if the person has the right to sign all company contracts), Legal Name, Email, Date of Birth, and their complete address. In order to add a new company representative just use the ADD button.

    Add an Ultimate Beneficial Owner / Share Holder and fill in the necessary information, like: Legal Name, Email, Percentage of ownership of the company, Date of Birth, and their address. In order to add a new Beneficial Owner / Share Holder just use the ADD button.

    After you have completed all the necessary fields, just click on the Save Changes button and request the company activation. You may place a request to activate the company every 24 hours.

    The Request Activation button will only appear if the Company representative form is completed with the necessary information!

    You will now have access to the Company documents where you will have to provide us the relevant official documents.

    Reset Password

    In case you forgot your password or you want to reset it, click on the Forgot your password link form the Sign In form.

    Enter your email address and click on the Send Verification Code.

    Enter the verification code sent to your email address in the correct field in order to verify it.

    After the email address is successfully verified click on the Continue button.

    You need to enter a new password and to confirm it. Click on the Continue button in order to complete the sign in process.

    You are redirected to the Sign In page, where you enter your email address and the newly updated password.

    Company Onboarding

    Onboarding is the tool that you need in order that the onboarding process to be quick and accurate and to ensure a long-term and successful business partnership. We have developed an intuitive and secure online system that it will allow merchants for an automated and quick onboarding process.

    It will only take a little time for you to manage the onboarding process. We have strive to minimize the long and tiresome process during merchant boarding and the ongoing challenges of completing forms and fields while building the merchant’s and company’s profile.

    Get a list of Captures of a specific card payment

    You can get a list of all partial captures for a specific direct card payment by using an action based on GET HTTP request. Please be aware that only a limited amount of details for each capture will be provided.

    Definition: GET /v1/payments/{id}/captures

    Where:
    • {id} – GlobalPay Payment ID

    Request:

    GET https://securetest.smart2pay.com/v1/payments/202247/captures
    Authorization: Basic MTAxMDpnYWJp

    Response:

    HTTP/1.1 200 OK
    Content-Type: application/json; charset=utf-8
    
    {
      "Captures": [
      {
        "ID": 266,
        "SiteID": 1010,
        "Created": "20161205095522",
        "MerchantTransactionID": "s2ptest_h22",
        "OriginatorTransactionID": null,
        "PaymentID": 202247,
        "Amount": 500,
        "Currency": "EUR",
        "Status": {
          "ID": 2,
          "Info": "Success",
          "Reasons": []
          }
        },
        {
        "ID": 267,
        "SiteID": 1010,
        "Created": "20161205095522",
        "MerchantTransactionID": "s2ptest_h23",
        "OriginatorTransactionID": null,
        "PaymentID": 202247,
        "Amount": 2000,
        "Currency": "EUR",
        "Status": {
          "ID": 4,
          "Info": "Failed",
          "Reasons": [
            {
              "Code": "2209",
              "Info": "Capture.Amount exceeds authorization amount"
              }
            ]
          }
        }
      ]
    }

    You can also get information for a specific capture of a direct card payment by using an action based on GET HTTP request.

    Definition: GET /v1/payments/{id}/capture/{id}

    Where:
    • payments/{id} – GlobalPay Payment ID
    • capture/{id} – The ID of the specific capture

    Request:

    GET https://securetest.smart2pay.com/v1/payments/202247/captures/266
    Authorization: Basic MTAxMDpnYWJp

    Response:

    HTTP/1.1 200 OK
    Content-Type: application/json; charset=utf-8
    
    {
        "Capture": {
            "ID": 266,
            "SiteID": 1010,
            "Created": "20161205095522",
            "MerchantTransactionID": "s2ptest_h22",
            "OriginatorTransactionID": null,
            "PaymentID": 202247,
            "Amount": 500,
            "Currency": "EUR",
            "Status": {
                "ID": 2,
                "Info": "Success",
                "Reasons": []
            }
        }
    }

    Nuvei Mirakl Plugin for Marketplaces

    Looking for one marketplace-focused solution, which is also fully compliant with the PSD2 regulatory requirements?

    You’re in the right place!

    Our solution for marketplace platforms has been designed to seamlessly integrate with Mirakl’s e-marketplace products and allows for fully customizable marketplace onboarding and split payments processes.

    Mirakl Marketplace Platform is one of the most modern, flexible, and feature-rich Marketplace solution available, with years of best practices built in and also offering clients unparalleled expertise from their team of 30+ business, technical, and operational marketplace experts.

    Not using Mirakl? No problem: we also offer Marketplace APIs to help you manage marketplace payments. More info here: https://docs-apm.nuvei.com/category/marketplace-api/.

    The solution provides access to credit card payments and alternative payment methods for a Marketplace in a simple yet reliable legal and technical setup.

    We are committed to help marketplaces run their business without worrying about the associated regulatory requirements from the new PSD2 directive which have come into force beginning 2018.

    Nuvei solution ensures that all of the participating shops as well as the marketplace will benefit of a seamlessly onboarding process, reliable and secure transaction processing, reconciliation to the penny and prompt settlements.

    The Mirakl plugin features:

    • automated import of all the the newly created shops and required documents from Mirakl to Smart2pay platform – leading to a fully customizable and seamless onboarding process.
    • automated shop approval notification which contains all info you need to start processing right away. More info here: Mirakl Notification for Shop Approval.
    • automated import of all payment instructions to marketplace participants and handling all the commission fees for the marketplace operator. Please discuss with our technical support the setup of your Mirakl voucher generation process.
    • supporting a wide range of payment methods from credit card payment to alternative payment methods with an all-in-one unified API and settlement flow. 

    Here is how it works:

    1 Marketplace - Processes and Systems

    The technical process (KYC Flow) with all the necessary steps is described next:

      All KYC processes related to marketplace onboarding of the participating shops take place in Mirakl KYC system. All KYC processes related to payments take place in Nuvei KYC system.

    • Mirakl Marketplace accepts a new shop on its platform and creates an entry in its database.
    • Mirakl Marketplace exposes an API which Nuvei KYC platform calls several times per day to pull information about the newly created shops.
    • Nuvei KYC platform pulls all available information about the shop (ShopID, Alias, shop representative e-mail, documents etc.). If all the required information is not available, the merchant representative will have to fill it in on Nuvei KYC platform.
    • Nuvei will create an account for the shop in the Nuvei KYC platform and send an e-mail to the shop representative with the login details.
    • The shop representative will fill in any missing company related data and upload KYC/UBO specific documentation.
    • The shop representative signs online the Merchant agreement for Payment processing.
    • Nuvei Risk team reviews the company.
    • In case of approval, a siteID is generated in the Nuvei platform.
    • Nuvei will do a push notification to a page designated by Mirakl with the following info ShopID, SiteID, APIKEY. The last two parameters need to be used when calling Nuvei REST API when processing the payments. Mirakl Marketplace needs to respond with HTTP return code 204 (No content) to the POST notification.

    Please contact our support team at technicalsupport-s2p@nuvei.com to schedule a more in depth demo on how we help your marketplace to process payments and perform split settlements.

    Exemptions to Strong Customer Authentication (SCA)

    With the Second Payment Services Directive (PSD2), the new set of laws and regulations for payment services in the European Union (EU) and the European Economic Area (EEA), Strong Customer Authentication (SCA) will be the requirement for all online transactions. However, there are still some exemptions from this rule where specific types of low-risk payments may be still exempted from Strong Customer Authentication (SCA).

    Please keep in mind that banks can choose not to honor these exemptions and you need to be prepared to handle a SCA challenge even if the transactions has been submitted under one of the below exemptions.

    The most relevant SCA exemptions are:

    • MIT
    • Low Risk / TRA
    • Low Value
    • Secure Corporate payments
    • Trusted Beneficiaries

    1. Merchant Initiated Transaction (MIT)

    MITs are payment transactions that are not initiated by the payer but by the payee only and are not subject to strong customer authentication (SCA) to the extent that these transactions are initiated without any interaction or involvement of the payer. MIT transactions are subjected to SCA except when a mandate is signed by the client. For example, SEPA Direct Debits are initiated by the merchant but have a direct debit mandate signed by the end customer. Thus, SCA is not applicable in this case and there are no restrictions to the frequency or the amount (obtained scheme transaction identifier needs to be provided for use in the subsequent transactions).

    Adjustment of initial Authorisation allows merchants to increase or decrease the authorised amount after the initial authorisation has taken place is also MIT. This enables tipping.

    2. TRA – Transactional Risk Analysis

    SCA can be deactivated for online payments between €30 and €500, depending on the payment providers fraud rates (see table below). There are no low-risk exemptions for transactions over €500. Merchants have to rely on a payment service provider (e.g. an acquirer) to act upon their request. In addition, the test to trigger the exemption rests with whether the PSP satisfies the prescribed conditions, not the merchants themselves. Nuvei keeps a very low fraud rate by using state of the art anti-fraud solutions such as RedShield, Machine Learning algorithms and by working with low risk acquiring banks which have very good fraud scores.

    Adding additional information in the payment request will maximize the probability of getting the exemption by Issuers. The chargeback liability shifts to the issuer as well.

    Regulatory Technical Standards (RTS), that payment providers need to take into account through real-time risk analysis, covers the following:

    • abnormal spending or behavioral pattern of the payer;
    • unusual information about the payer’s device/software access;
    • malware infection in any session of the authentication procedure;
    • known fraud scenario in the provision of payment services;
    • abnormal location of the payer;
    • high-risk location of the payee.

    The fraud rate limits for payment providers are being applied as follows:

    Fraud rate and amount limits
    Fraud transaction rate Amount limits
    Up to 0.01% Up to €500
    Up to 0.06% Up to €250
    Up to 0.13% Up to €100

    3. Low value: Small amounts less than 30 EUR

    For a transaction of less than 30 EUR and up to 100 EUR accumulated or up to 5 transactions since the last SCA. Beyond 100 EUR or beyond 5 unauthenticated transactions, a new SCA is required. Keep in mind that since the information needed to validate these stipulations is only available to the issuing bank, you will still need to confirm if SCA is required on all transactions that might fall into this exemption category.

    4. Payment to a trusted beneficiary

    Customers can add their preferred online sellers to a list of trusted beneficiaries held by the issuing bank, so that they don’t required to authenticate for each new payment. Please instruct your customers if possible to add your business to the white-list at their bank.

    5. Secure Corporate payments

    SCA can de deactivated for corporate card payments made through secure processes and protocols initiated by businesses and not available for consumers. Payments that are included in this category are those made through central travel accounts, lodged cards, virtual cards, and secure corporate cards, like the ones used in a corporate travel management system.

    See below an example of a MerchantInitiatedTransaction (MIT) transaction type:

    Request:

    POST https://securetest.smart2pay.com/v1/payments
    Authorization: Basic MTAxMDpnYWJp
    
    {
      "Payment": {
        "MerchantTransactionID": "s2ptest_m10",
        "Amount": 1000,
        "Currency": "EUR",
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",   
        "Card": {
          "HolderName": "John Doe",
          "Number": "4548812049400004",
          "ExpirationMonth": "05",
          "ExpirationYear": "2021",
          "SecurityCode": "123"     
          },
         "3DSecure": true,
         "DeviceInfo": {
          "BrowserAcceptHeader": "application/json, text/javascript, */*; q=0.01",
          "BrowserUserAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36",
          "BrowserJavaEnabled": false,
          "BrowserJavaScriptEnabled": true,
          "BrowserLanguage": "ro-RO",
          "BrowserColorDepth": "24",
          "BrowserScreenHeight": "1080",
          "BrowserScreenWidth": "1920",
          "BrowserTimeZone": "-180"
        },         
        "ScaExemption": "MerchantInitiatedTransaction"
      }
    }
    

    There are 2 possible response scenarios:

    • Exemption is approved: The cardholder’s bank receives the request, assesses the risk level of the transaction, and approves the exemption and the SCA is no more necessary. The payment has status Authorized / Captured in the response.

      Response:

      HTTP/1.1 201 Created
      Content-Type: application/json; charset=utf-8
      
      {
        "Payment": {
          "ID": 172498,
          "ClientIP": null,
          "SkinID": 200,
          "Created": "20190913075654",
          "MerchantTransactionID": "s2ptest_m10",
          "OriginatorTransactionID": null,
          "Amount": "100",
          "Currency": "EUR",
          "CapturedAmount": "0",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
         "Description": "silviu test",
          "StatementDescriptor": "Static Description",
          "MethodID": 6,
          "MethodOptionID": null,
          "SiteID": 1010,
          "NotificationDateTime": null,
          "Customer": null,
          "BillingAddress": null,
          "ShippingAddress": null,
          "Articles": null,
          "Card": {
            "HolderName": "Test Person",
            "Number": "VISA-0004",
            "ExpirationMonth": "05",
            "ExpirationYear": "2021",
            "IssuingBankCountry": null
          },
          "CreditCardToken": null,
          "Status": {
            "ID": 9,
            "Info": "Authorized",
            "Reasons": []
          },
          "MethodTransactionID": null,
          "AuthorizationCode": "971896",
          "PaymentTokenLifetime": 10,
          "Capture": false,
          "RedirectURL": null,
          "3DSecure": true,
          "3DSecureData": null,   
          "ScaExemption": "MerchantInitiatedTransaction",
          "CardOnFile": null,
          "Fraud": null
        }
      }

    • Exemption is rejected: The cardholder’s bank receives the request, assesses the risk level of the transaction, and rejectes the exemption and the SCA is mandatory. The payment has status Open in the response. The customer accesses the RedirectURL form the response and is redirected to the 3D Secure page to authenticate the transaction.

      Response:

      HTTP/1.1 201 Created
      Content-Type: application/json; charset=utf-8{
        "Payment": {
          "ID": 172498,
          "ClientIP": null,
          "SkinID": 200,
          "Created": "20190913075654",
          "MerchantTransactionID": "s2ptest_m10",
          "OriginatorTransactionID": null,
          "Amount": "100",
          "Currency": "EUR",
          "CapturedAmount": "0",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "Description": "silviu test",
          "StatementDescriptor": "Static Description",
          "MethodID": 6,
          "MethodOptionID": null,
          "SiteID": 1010,
          "NotificationDateTime": null,
          "Customer": null,
          "BillingAddress": null,
          "ShippingAddress": null,
          "Articles": null,
          "Card": {
            "HolderName": "Test Person",
            "Number": "VISA-6852",
            "ExpirationMonth": "05",
            "ExpirationYear": "2021",
            "IssuingBankCountry": null
          },
          "CreditCardToken": null,
          "Status": {
            "ID": 1,
            "Info": "Open",
            "Reasons": []
          },
          "MethodTransactionID": null,
          "AuthorizationCode": null,
          "PaymentTokenLifetime": 10,
          "Capture": false,
          "RedirectURL": "http://85.186.26.139:58938/v1/Payments/FillCardDetails?PaymentToken=172500.1006.5CD50C1B1707FB83EAA7655F9B21D42E9&SkipLandingPage=true",
          "3DSecure": true,
          "3DSecureData": null,   
          "ScaExemption": "MerchantInitiatedTransaction",
          "CardOnFile": null,
          "Fraud": null
        }
      }

    Card on file transactions (COF)

    A card-on-file transaction is a transaction where a cardholder authorizes a merchant to store the cardholder’s payment details, and also authorizes that same merchant to bill the cardholder’s stored account.

    Transactions are either initiated by a consumer, or by a merchant based on the instructions given to them by the consumer. It is possible for a merchant to initiate a transaction without consumer action.

    Consumer-Initiated Transactions (CIT): where the consumer is present and provides their payment credentials. This can be through a terminal in-store, or online through a checkout experience. A consumer-initiated transaction contains proof (such as track data, chip data with cryptograms, cardholder verification methods, and online through the presence of Card Verification Value 2 (CVV2) or Verified by Visa (VBV) authentication data) that the cardholder was involved in the transaction.

    Merchant-Initiated Transactions (MIT): a transaction that depends to a previous consumer-initiated transaction, but it is conducted without the consumer being present and without any additional cardholder validation performed. It’s a transaction based on a previous agreement between the consumer and the merchant for a recurring product or service or an automated billing or unscheduled transactions etc.

    Don’t miss out the below examples with CardOnFile object used for the initial transaction and also for a subsequent one.

    Card On File (COF) Transaction Types
    Type Description
    Installments Deferred payment. Always referring to an INDIVIDUAL purchase, the amount of the several transactions is fixed, and with a definite time interval.
    Recurring Recurring payment. The amount of transactions can be fixed or variable, and with a defined time interval.
    Reauthorization Normally before partial shipments. Also, when the client extends the stay in hotel / rental of the vehicle or when, having an estimated authorization, the final amount is requested (“settlement”).
    Resubmission Original denied because of “balance”; only for certain sectors of activity (for more details check the regulations of the brands) and with a maximum number of days from the purchase. Relevant example:”Transport”.
    Delayed Those that happen after the transaction for services rendered / used unknown at the beginning. (Minibar, vehicle damage, fines ….)
    Incremental When additional services are incurred during the contract period.
    No Show When the merchant charges services to which the owner committed, but then failed to comply with the agreed terms. Relevant example: unattended reservations at hotels without cancellation.
    Other The rest of COF transactions that do not fit with any of the previous ones.
    • For an initial transaction from a subsequent payments chain the IsInitial parameter from CardOnFile object needs to be set to true.

      Request:

      POST https://securetest.smart2pay.com/v1/payments
      Authorization: Basic MTAxMDpnYWJp
      
      {
        "Payment": {
        "MerchantTransactionID": "s2ptest_11a",
        "Amount": "100",
        "Currency": "EUR",
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "Test Description",
        "StatementDescriptor1": "Dynamic Test Description",
        "Card": {
          "HolderName": "Test Person",
          "Number": "4012005162084369",
          "ExpirationMonth": "05",
          "ExpirationYear": "2021",
          "SecurityCode": "123",
          "RequireSecurityCode": true
          },
        "Capture": false,
        "GenerateCreditCardToken": false,
        "PaymentTokenLifetime": 10,
        "3DSecure": true,
        "DeviceInfo": {
          "BrowserAcceptHeader": "application/json, text/javascript, */*; q=0.01",
          "BrowserUserAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36",
          "BrowserJavaEnabled": false,
          "BrowserJavaScriptEnabled": true,
          "BrowserLanguage": "ro-RO",
          "BrowserColorDepth": "24",
          "BrowserScreenHeight": "1080",
          "BrowserScreenWidth": "1920",
          "BrowserTimeZone": "-180"
          },
        "CardOnFile":{
               "IsInitial": true,
               "TransactionType": "Recurring"
            },
        "Language": "ro-RO",
        "SkinID": 200
        }
      }

      Response:

      HTTP/1.1 201 Created
      Content-Type: application/json; charset=utf-8
      
      {
          "Payment": {
              "ID": 1234,
              "ClientIP": null,
              "SkinID": 200,
              "Created": "20190828091954",
              "MerchantTransactionID": "s2ptest_11a",
              "OriginatorTransactionID": null,
              "Amount": "100",
              "Currency": "EUR",
              "CapturedAmount": "0",
              "ReturnURL": "http://demo.smart2pay.com/redirect.php",
              "Description": "Test Description",
              "StatementDescriptor": "Static Description",
              "MethodID": 6,
              "MethodOptionID": null,
              "SiteID": 1010,
              "NotificationDateTime": null,
              "Customer": null,
              "BillingAddress": null,
              "ShippingAddress": null,
              "Articles": null,
              "Card": {
                  "HolderName": "Test Person",
                  "Number": "VISA-4369",
                  "ExpirationMonth": "05",
                  "ExpirationYear": "2021",
                  "IssuingBankCountry": null
              },
              "CreditCardToken": null,
              "Status": {
                  "ID": 9,
                  "Info": "Authorized",
                  "Reasons": []
              },
              "MethodTransactionID": null,
              "AuthorizationCode": "591659",
              "PaymentTokenLifetime": 10,
              "Capture": false,
              "RedirectURL": null,
              "3DSecure": true,
              "DeviceInfo": {
                  "BrowserAcceptHeader": "application/json, text/javascript, */*; q=0.01",
                  "BrowserUserAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36",
                  "BrowserJavaEnabled": false,
                  "BrowserJavaScriptEnabled": true,
                  "BrowserLanguage": "ro-RO",
                  "BrowserColorDepth": "24",
                  "BrowserScreenHeight": "1080",
                  "BrowserScreenWidth": "19200",
                  "BrowserTimeZone": "-180"
              },
              "ScaExemption": null,
              "CardOnFile": {
                "IsInitial": false,
                "TransactionType": "Recurring"
              },
              "Fraud": {
                  "Status": "Accept",
                  "Score": 31,
                  "Reason": "No decision provided"
              }
          }
      }

    • Transaction that depends to the previous consumer-initiated transaction. For a transaction from a subsequent payments chain the IsInitial parameter from CardOnFile object needs to be set to false.For subsequent payments always send in the request the InitialPaymentID parameter in the CardOnFile object.

      Request:

      POST https://securetest.smart2pay.com/v1/payments
      Authorization: Basic MTAxMDpnYWJp
      
      {
        "Payment": {
        "MerchantTransactionID": "s2ptest_12a",
        "Amount": "100",
        "Currency": "EUR",
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "Test Description",
        "StatementDescriptor1": "Dynamic Test Description",
        "Card": {
          "HolderName": "Test Person",
          "Number": "4012005162084369",
          "ExpirationMonth": "05",
          "ExpirationYear": "2021",
          "SecurityCode": "123",
          "RequireSecurityCode": true
          },
        "Capture": false,
        "GenerateCreditCardToken": false,
        "PaymentTokenLifetime": 10,
        "3DSecure": false,
        "DeviceInfo": {
          "BrowserAcceptHeader": "application/json, text/javascript, */*; q=0.01",
          "BrowserUserAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36",
          "BrowserJavaEnabled": false,
          "BrowserJavaScriptEnabled": true,
          "BrowserLanguage": "ro-RO",
          "BrowserColorDepth": "24",
          "BrowserScreenHeight": "1080",
          "BrowserScreenWidth": "1920",
          "BrowserTimeZone": "-180"
          },
        "ScaExemption": "MerchantInitiatedTransaction",
        "CardOnFile":{
          "IsInitial": false,
          "TransactionType": "Recurring",
          "InitialPaymentID": 1234        
          },
        "Language": "ro-RO",
        "SkinID": 200
        }
      }

      Response:

      HTTP/1.1 201 Created
      Content-Type: application/json; charset=utf-8
      
      {
          "Payment": {
              "ID": 12345,
              "ClientIP": null,
              "SkinID": 200,
              "Created": "20190828091954",
              "MerchantTransactionID": "s2ptest_12a",
              "OriginatorTransactionID": null,
              "Amount": "100",
              "Currency": "EUR",
              "CapturedAmount": "0",
              "ReturnURL": "http://demo.smart2pay.com/redirect.php",
              "Description": "Test Description",
              "StatementDescriptor": "Static Description",
              "MethodID": 6,
              "MethodOptionID": null,
              "SiteID": 1010,
              "NotificationDateTime": null,
              "Customer": null,
              "BillingAddress": null,
              "ShippingAddress": null,
              "Articles": null,
              "Card": {
                  "HolderName": "Test Person",
                  "Number": "VISA-4369",
                  "ExpirationMonth": "05",
                  "ExpirationYear": "2021",
                  "IssuingBankCountry": null
              },
              "CreditCardToken": null,
              "Status": {
                  "ID": 9,
                  "Info": "Authorized",
                  "Reasons": []
              },
              "MethodTransactionID": null,
              "AuthorizationCode": "591659",
              "PaymentTokenLifetime": 10,
              "Capture": false,
              "RedirectURL": null,
              "3DSecure": false,
              "DeviceInfo": {
                  "BrowserAcceptHeader": "application/json, text/javascript, */*; q=0.01",
                  "BrowserUserAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36",
                  "BrowserJavaEnabled": false,
                  "BrowserJavaScriptEnabled": true,
                  "BrowserLanguage": "ro-RO",
                  "BrowserColorDepth": "24",
                  "BrowserScreenHeight": "1080",
                  "BrowserScreenWidth": "19200",
                  "BrowserTimeZone": "-180"
              },
              "ScaExemption": "MerchantInitiatedTransaction",
              "CardOnFile": {
                "IsInitial": false,
                "TransactionType": "Recurring",
                "InitialPaymentID": 1234
                },
              "Fraud": {
                  "Status": "Accept",
                  "Score": 31,
                  "Reason": "No decision provided"
              }
          }
      }

    3D Secure 2.0 Pass-Through Payments

    You can submit a request to authorize payments using authentication data from your own 3D Secure MPI provider, by sending the necessary 3D Secure parameters listed below in the object 3DSecureData.

    Request:

    POST https://securetest.smart2pay.com/v1/payments
    Authorization: Basic MTAxMDpnYWJp
    
    {
      "Payment": {
        "MerchantTransactionID": "s2ptest_3a",
        "Amount": "100",
        "Currency": "EUR",
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "Test Description",
        "StatementDescriptor": "Dynamic Test Description",
        "Card": {
          "HolderName": "Test Person",
          "Number": "4548812049400004",
          "ExpirationMonth": "11",
          "ExpirationYear": "2025",
          "SecurityCode": "123",
          "RequireSecurityCode": true
        },
        "Capture": false,
        "GenerateCreditCardToken": false,
        "PaymentTokenLifetime": 10,
        "3DSecure": true,
        "3DSecureData": { 
          "AuthenticationStatus": "Y",
          "ECI": "05",
          "CAVV": "MDA5ODYyNjQxMzEyNzQxMTQ4NzA=",
          "DSID": "c272b04f-6e7b-43a2-bb78-90f4fb94aa25",
          "3DSecureVersion": "2.1.0"
          },
        "ScaExemption": "LowValueTransaction",
        "Language": "ro-RO",
        "SkinID": 200
      }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Payment": {
            "ID": 208158,
            "ClientIP": null,
            "SkinID": 200,
            "Created": "20190828082527",
            "MerchantTransactionID": "s2ptest_3a",
            "OriginatorTransactionID": null,
            "Amount": 100,
            "Currency": "EUR",
            "CapturedAmount": "0",
            "ReturnURL": "http://demo.smart2pay.com/redirect.php",
            "Description": "Test Description",
            "StatementDescriptor": "Dynamic Test Description",
            "MethodID": 6,
            "MethodOptionID": null,
            "SiteID": 1010,
            "NotificationDateTime": null,
            "Customer": null,
            "BillingAddress": null,
            "ShippingAddress": null,
            "Articles": null,
            "Card": {
                "HolderName": "Test Person",
                "Number": "VISA-0004",
                "ExpirationMonth": "11",
                "ExpirationYear": "2025",
                "IssuingBankCountry": null
            },
            "CreditCardToken": null,
            "Status": {
                "ID": 9,
                "Info": "Authorized",
                "Reasons": []
            },
            "MethodTransactionID": null,
            "AuthorizationCode": "143383",
            "PaymentTokenLifetime": 10,
            "Capture": false,
            "RedirectURL": null,
            "3DSecure": true,
            "3DSecureData": {
                "AuthenticationStatus": "Y",
                "ECI": "05",
                "CAVV": "MDA5ODYyNjQxMzEyNzQxMTQ4NzA=",
                "DSID": "c272b04f-6e7b-43a2-bb78-90f4fb94aa25",
                "3DSecureVersion": "2.1.0"
            },
            "DeviceInfo": null,
            "ScaExemption": "LowValueTransaction",
            "Fraud": {
                "Status": "Accept",
                "Score": 31,
                "Reason": "No decision provided"
            }
        }
    }

    3D Secure 2.0 Payments

    3D Secure 2.0 is the new authentication protocol that provides an additional layer of verification for card transactions. Strong Customer Authentication (SCA) requires merchants to integrate into the checkout flow a two-factor authentication, requiring their customers to use two out of three elements: something only the user knows like a password, something only the user possesses like the phone and something only the user possesses like a fingerprint.

    Checkout the below example of a payment using the 3D Secure 2.0 protocol.

    Although 3D Secure 2.0 protocol requires sending much more additional details, it increases the chances for a smooth and frictionless payment flow.

    Request:

    POST https://securetest.smart2pay.com/v1/payments
    Authorization: Basic MTAxMDpnYWJp
    
    {
      "Payment": {
      "MerchantTransactionID": "s2ptest_6a",
      "Amount": "100",
      "Currency": "EUR",
      "ReturnURL": "http://demo.smart2pay.com/redirect.php",
      "Description": "Test Description",
      "StatementDescriptor1": "Dynamic Test Description",
      "BillingAddress": {
        "City": "Iasi",
        "ZipCode": "7000-49",
        "State": "Iasi",
        "Street": "Sf Lazar",
        "StreetNumber": "37",
        "HouseNumber": "5A",
        "HouseExtension": "-",
        "Country": "RO"
        },
      "ShippingAddress": {
        "City": "Iasi",
        "ZipCode": "700049",
        "State": "Iasi",
        "Street": "Sf Lazar",
        "StreetNumber": "37",
        "HouseNumber": "-",
        "HouseExtension": "-",
        "Country": "RO" 
        },
      "Customer": {
        "MerchantCustomerID": "3452342354232",
        "Email": "accept@accept.com",
        "Firstname": "Test",
        "Lastname": "Person",   
        "SocialSecurityNumber": "45908-28324",
        "Phone": "0744-783322",
        "Company": "S2P",
        "Gender": "1"
        },
      "Card": {
        "HolderName": "Test Person",
        "Number": "4548812049400004",
        "ExpirationMonth": "11",
        "ExpirationYear": "2025",
        "SecurityCode": "123",
        "RequireSecurityCode": true
        },
      "Capture": false,
      "GenerateCreditCardToken": false,
      "PaymentTokenLifetime": 10,
      "3DSecure": true,
      "DeviceInfo": {
        "BrowserAcceptHeader": "application/json, text/javascript, */*; q=0.01",
        "BrowserUserAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36",
        "BrowserJavaEnabled": false,
        "BrowserJavaScriptEnabled": true,
        "BrowserLanguage": "ro-RO",
        "BrowserColorDepth": "24",
        "BrowserScreenHeight": "1080",
        "BrowserScreenWidth": "1920",
        "BrowserTimeZone": "-180"
        },
      "ScaExemption": "LowValueTransaction",
      "Language": "ro-RO",
      "SkinID": 200
      }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Payment": {
            "ID": 208161,
            "ClientIP": null,
            "SkinID": 200,
            "Created": "20190828091954",
            "MerchantTransactionID": "s2ptest_6a",
            "OriginatorTransactionID": null,
            "Amount": "100",
            "Currency": "EUR",
            "CapturedAmount": "0",
            "ReturnURL": "http://demo.smart2pay.com/redirect.php",
            "Description": "Test Description",
            "StatementDescriptor": "Static Description",
            "MethodID": 6,
            "MethodOptionID": null,
            "SiteID": 1010,
            "NotificationDateTime": null,
            "Customer": {
                "ID": 647,
                "MerchantCustomerID": "3452342354232",
                "Email": "accept@accept.com",
                "FirstName": "Test",
                "LastName": "Person",
                "Gender": "1",
                "SocialSecurityNumber": "45908-28324",
                "Phone": "0744-783322",
                "Company": "S2P"
            },
            "BillingAddress": {
                "ID": 253,
                "City": "Iasi",
                "ZipCode": "7000-49",
                "State": "Iasi",
                "Street": "Sf Lazar",
                "StreetNumber": "37",
                "HouseNumber": "5A",
                "HouseExtension": "-",
                "Country": "RO"
            },
            "ShippingAddress": {
                "ID": 87,
                "City": "Iasi",
                "ZipCode": "700049",
                "State": "Iasi",
                "Street": "Sf Lazar",
                "StreetNumber": "37",
                "HouseNumber": "-",
                "HouseExtension": "-",
                "Country": "RO"
            },
            "Articles": null,
            "Card": {
                "HolderName": "Test Person",
                "Number": "VISA-0004",
                "ExpirationMonth": "11",
                "ExpirationYear": "2025",
                "IssuingBankCountry": null
            },
            "CreditCardToken": null,
            "Status": {
                "ID": 9,
                "Info": "Authorized",
                "Reasons": []
            },
            "MethodTransactionID": null,
            "AuthorizationCode": "591659",
            "PaymentTokenLifetime": 10,
            "Capture": false,
            "RedirectURL": null,
            "3DSecure": true,
            "DeviceInfo": {
                "BrowserAcceptHeader": "application/json, text/javascript, */*; q=0.01",
                "BrowserUserAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36",
                "BrowserJavaEnabled": false,
                "BrowserJavaScriptEnabled": true,
                "BrowserLanguage": "ro-RO",
                "BrowserColorDepth": "24",
                "BrowserScreenHeight": "1080",
                "BrowserScreenWidth": "19200",
                "BrowserTimeZone": "-180"
            },
            "ScaExemption": null,
            "Fraud": {
                "Status": "Accept",
                "Score": 31,
                "Reason": "No decision provided"
            }
        }
    }

    PayWithMyBank Recurring Payment

    Definition: POST /v1/payments/recurrent

    A recurring payment is created in the same manner a one-off payment is created. In addition, you need to send the PreapprovalID (the PreapprovalID received when you created/opened a preapproval) and the information specific to each payment method.

    For PayWithMyBank (58), you need to send the PreapprovalID (the PreapprovalID received when you created/opened a preapproval) and the Amount to be captured:

    Request:

    POST https://paytest.smart2pay.com/v1/payments/recurrent
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk={
     "Payment": {
       "PreapprovalID": 19800,
       "MerchantTransactionID": "s2ptest_h-1",
       "Amount": 20,
       "Currency": "USD",
       "MethodID": 58
      }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Payment": {
            "ID": 4722746,
            "SkinID": null,
            "ClientIP": null,
            "Created": "20190729142257",
            "MerchantTransactionID": "s2ptest_h-1",
            "OriginatorTransactionID": null,
            "Amount": "20",
            "Currency": "USD",
            "CapturedAmount": null,
            "ReturnURL": null,
            "Description": "",
            "MethodID": 58,
            "MethodOptionID": null,
            "IncludeMethodIDs": null,
            "ExcludeMethodIDs": null,
            "PrioritizeMethodIDs": null,
            "SiteID": 30201,
            "NotificationDateTime": null,
            "Customer": null,
            "BillingAddress": null,
            "ShippingAddress": null,
            "Articles": null,
            "Details": null,
            "ReferenceDetails": null,
            "CustomParameters": null,
            "PreapprovalID": 19800,
            "Status": {
                "ID": 1,
                "Info": "Open",
                "Reasons": null
            },
            "Fraud": null,
            "MethodTransactionID": null,
            "TokenLifetime": null,
            "Capture": null,
            "PreapprovalDetails": null,
            "RedirectURL": null
        }
    }

    Please be aware that the final status of the payment can be received in up to 3 business days depending on the customer’s Bank used!

    PayWithMyBank Close a Preapproval

    Definition: DELETE /v1/preapprovals/{id}

    Where:
    • {id} – GlobalPay Preapproval ID

    To close a preapproval, you must send a DELETE action for an existing preapproval object.

    Checkout the below example to close a preapproval for PayWithMyBank (58):

    Request:

    DELETE https://paytest.smart2pay.com/v1/preapprovals/19800
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=

    Response:

    HTTP/1.1 200 OK
    Content-Type: application/json; charset=utf-8
    
    {
        "Preapproval": {
            "ID": 19800,
            "Created": "20190729134913",
            "MethodID": 58,
            "SiteID": 30201,
            "MerchantPreapprovalID": "s2ptest_h-1",
            "RecurringPeriod": 0,
            "PreapprovedMaximumAmount": "20",
            "Currency": "USD",
            "ReturnURL": "http://demo.smart2pay.com/redirect.php",
            "Description": "Update: 1 year subscription",
            "Customer": {
                "ID": 2625948,
                "MerchantCustomerID": null,
                "Email": "jdoe@gmail.com",
                "FirstName": "John",
                "LastName": "Doe",
                "Gender": null,
                "SocialSecurityNumber": null,
                "Phone": null,
                "Company": null,
                "DateOfBirth": null
            },
            "BillingAddress": {
                "ID": 520,
                "City": null,
                "ZipCode": null,
                "State": null,
                "Street": null,
                "StreetNumber": null,
                "HouseNumber": null,
                "HouseExtension": null,
                "Country": "US"
            },
            "Status": {
                "ID": 4,
                "Info": "ClosedByCustomer",
                "Reasons": null
            },
            "RedirectURL": null,
            "MethodOptionID": 0,
            "PreapprovedFrequency": null,
            "MandateReference": null,
            "Details": null
        }
    }

    PayWithMyBank Change a Preapproval

    Definition: PATCH /v1/preapprovals/{id}

    Where:
    • {id} – GlobalPay Preapproval ID

    You can change the attributes of an already created preapproval by applying a PATCH.

    Checkout the below example to change a preapproval for PayWithMyBank (58):

    Request:

    PATCH https://paytest.smart2pay.com/v1/preapprovals/19800
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
     "Preapproval": {
       "MerchantPreapprovalID": "s2ptest_h-1",
       "PreapprovedMaximumAmount": 20,
       "Currency": "USD",
       "Description": "Update: 1 year subscription",
       "ReturnURL": "http://demo.smart2pay.com/redirect.php",
       "MethodID": 58,
       "Customer": {
          "FirstName": "John",
          "LastName": "Doe",
          "Email": "jdoe@gmail.com"
         },
       "BillingAddress": {
          "Country": "US"
          }
       }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Preapproval": {
            "ID": 19800,
            "Created": "20190729134913",
            "MethodID": 58,
            "SiteID": 30201,
            "MerchantPreapprovalID": "s2ptest_h-1",
            "RecurringPeriod": 0,
            "PreapprovedMaximumAmount": "20",
            "Currency": "USD",
            "ReturnURL": "http://demo.smart2pay.com/redirect.php",
            "Description": "Update: 1 year subscription",
            "Customer": {
                "ID": 2625948,
                "MerchantCustomerID": null,
                "Email": "jdoe@gmail.com",
                "FirstName": "John",
                "LastName": "Doe",
                "Gender": null,
                "SocialSecurityNumber": null,
                "Phone": null,
                "Company": null,
                "DateOfBirth": null
            },
            "BillingAddress": {
                "ID": 520,
                "City": null,
                "ZipCode": null,
                "State": null,
                "Street": null,
                "StreetNumber": null,
                "HouseNumber": null,
                "HouseExtension": null,
                "Country": "US"
            },
            "Status": {
                "ID": 1,
                "Info": "Pending",
                "Reasons": null
            },
            "RedirectURL": "https://europaytest.smart2pay.com/PWMB/Landing/PreapprovalLanding.aspx?ID=15352&Hash=8FCF71570B0E7CE025C33B27E34F4493",
            "MethodOptionID": 0,
            "PreapprovedFrequency": null,
            "MandateReference": null,
            "Details": null
        }
    }

    PayWithMyBank Preapproval Notification

    Upon successful approval, we will notify you about the new status of the preapproval to the URL you setup in the Merchant Dashboard.

    You need to respond with HTTP Status 204 (No Content)!

    Preapproval notification format for PayWithMyBank:

    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
    "Preapproval": {
      "ID": 19800,
      "Created": "20190729134913",
      "MethodID": 58,
      "SiteID": 30201,
      "MerchantPreapprovalID": "s2ptest_h-1",
      "RecurringPeriod": 0,
      "PreapprovedMaximumAmount": "20",
      "Currency": null,
      "ReturnURL": "http://demo.smart2pay.com/redirect.php",
      "Description": "1 year subscription",
      "Customer": {
        "ID": 2625948,
        "MerchantCustomerID": null,
        "Email": "jdoe@gmail.com",
        "FirstName": "John",
        "LastName": "Doe",
        "Gender": null,
        "SocialSecurityNumber": null,
        "Phone": null,
        "Company": null,
        "DateOfBirth": null
      },
      "BillingAddress": {
        "ID": 520,
        "City": null,
        "ZipCode": null,
        "State": null,
        "Street": null,
        "StreetNumber": null,
        "HouseNumber": null,
        "HouseExtension": null,
        "Country": "US"
      },
      "Status": {
        "ID": 2,
        "Info": null,
        "Reasons": null
      },
      "RedirectURL": null,
      "MethodOptionID": 0,
      "PreapprovedFrequency": null,
      "MandateReference": null,
      "Details": null
      }
    }

    Response:

    204 No Content

    The message contains a Preapproval object with an updated Status, which can have the following meanings:

    PREAPPROVAL STATUS
    ID Info Description
    1 Pending The customer needs to confirm the preapproval
    2 Open The customer confirmed and you can use the preapproval to initiate recurring payments
    4 ClosedByCustomer The preapproval is closed and can no longer be used to initiate recurring payments

    PayWithMyBank Preapproval Request

    Definition: POST /v1/preapprovals

    To initiate a preapproval, you must create a preapproval object. The parameters of the preapproval are sent in the message body as a JSON object. See below an example of a preapproval request for PayWithMyBank (58).

    With PayWithMyBank, you can create preapprovals that can allow you to form subsequent recurrent payments. This is the most flexible type and allows the merchant to fully control when to initiate the money transfer(s) between the end user’s account and the merchant’s account (credits or debits). The Preapproval call basically creates a transaction representing the end user’s authorization to use their account for payments on the terms set in the request.

    A transaction ID is returned to the merchant within the return URL in the Preapproval response/notification. The merchant must store this transaction ID in the end user’s payment profile to allow future recurrent requests. The amount sent on the initial call defines the maximum aggregate amount that can be captured from the end user’s account across all recurrent calls. A zero-amount value on the Preapproval call removes this upper bound limit. With that setting, the merchant can enable open-ended recurrent scenarios.

    For PayWithMyBank preapproval requests CustomerName and CustomerEmail parameters are mandatory in the initial payment request.

    Request:

    POST https://paytest.smart2pay.com/v1/preapprovals
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
     "Preapproval": {
       "MerchantPreapprovalID": "s2ptest_h-1",
       "PreapprovedMaximumAmount": 20,
       "Currency": "USD",
       "Description": "1 year subscription",
       "ReturnURL": "http://demo.smart2pay.com/redirect.php",
       "MethodID": 58,
       "Customer": {
          "FirstName": "John",
          "LastName": "Doe",
          "Email": "jdoe@gmail.com"
         },
       "BillingAddress": {
          "Country": "US"
          }
       }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Preapproval": {
            "ID": 19800,
            "Created": "20190729134913",
            "MethodID": 58,
            "SiteID": 30201,
            "MerchantPreapprovalID": "s2ptest_h-1",
            "RecurringPeriod": 0,
            "PreapprovedMaximumAmount": "20",
            "Currency": "USD",
            "ReturnURL": "http://demo.smart2pay.com/redirect.php",
            "Description": "1 year subscription",
            "Customer": {
                "ID": 2625948,
                "MerchantCustomerID": null,
                "Email": "jdoe@gmail.com",
                "FirstName": "John",
                "LastName": "Doe",
                "Gender": null,
                "SocialSecurityNumber": null,
                "Phone": null,
                "Company": null,
                "DateOfBirth": null
            },
            "BillingAddress": {
                "ID": 520,
                "City": null,
                "ZipCode": null,
                "State": null,
                "Street": null,
                "StreetNumber": null,
                "HouseNumber": null,
                "HouseExtension": null,
                "Country": "US"
            },
            "Status": {
                "ID": 1,
                "Info": "Pending",
                "Reasons": null
            },
            "RedirectURL": "https://europaytest.smart2pay.com/PWMB/Landing/PreapprovalLanding.aspx?ID=15351&Hash=CD3F91C3DF49E901E91240FA42D89A64",
            "MethodOptionID": 0,
            "PreapprovedFrequency": null,
            "MandateReference": null,
            "Details": null
        }
    }

    GlobalPay Status Codes

    List of transaction status IDs
    Status ID Name Description *Final Status Applicable for
    1 Open The transaction is initiated in our system. No Payments / Refunds / Payouts
    2 Success The transaction is successful. Yes Payments / Refunds / Payouts
    3 Cancelled The payment was cancelled. The payments that can be cancelled are the payments with “Authorized” status or the payments that are cancelled by the customer on the form. Yes Payments
    4 Failed The transaction has failed. Yes Payments / Refunds / Payouts
    5 Expired The time period the customer had for completing the payment has expired. Yes Payments
    6 PendingOnCustomer The payment is awaiting approval from the customer. No Payments
    7 PendingOnProvider The payment is awaiting approval from the downstream partners/acquirers. No Payments
    8 Submitted The payment has been submitted. No Payments
    9 Authorized The payment was successfully authorized. In the initial request the Capture parameter is sent to false so the responsibility of the capturing the payment is on the merchants side.
    The goods can be delivered.
    No Payments
    10 AuthorizeRequested The payment has been submitted for authorization. No Payments
    11 Captured The transaction has been captured. Only payments with “Authorized” status can be captured.
    The goods can be delivered.
    Yes Payments
    12 Rejected The transaction has been rejected. Yes Payments
    13 CaptureRequested The payment was successfully authorized and the capture request was also sent to the provider.
    The goods can be delivered.
    No Payments
    14 Exception The transaction needs manual review from Smart2Pay. No Payments / Payouts
    15 CancelRequested The cancel request has been sent. No Payments
    16 Reversed The authorization has been reversed (the money were credited back to the customer account). Yes Payments / Payouts
    17 Completed The transaction has been completed by the customer. No Payments
    18 Processing The transaction is being processed. No Payments
    19 Disputed The payment is disputed by the customer. No Payments
    21 PartiallyRefunded The payment has been partially refunded with a smaller amount than the one from the initial paid transaction. Yes Payments
    22 Refunded The payment has been refunded with an equal amount as the one from the initial paid transaction. Yes Payments
    23 DisputeWon The cardholder has lost the dispute and the money will return to the merchant. Yes Chargebacks
    24 DisputeLost The cardholder has won the dispute and has received the money back. Yes Chargebacks
    25 Paid The transaction has been paid. Yes Payments
    26 Chargedback The cardholder has won the dispute and has received the money back. Yes Payments
    27 SecondDisputeWon The cardholder has lost the second dispute and the money will return to the merchant. Yes Chargebacks
    28 SecondDisputeLost The cardholder has won the second dispute and has received the money back. Yes Chargebacks
    30 PendingChallengeConfirmation The fraud provider has challenged the payment. Payment is authorized. You can reject or accept the challenge. No Payments
    33 QueuedForCapturing The payment will be sent automatically for capturing. No further action from you is required.
    The goods can be delivered.
    No Payments
    34 QueuedForCanceling The payment will be sent automatically for canceling. No further action from you is required. No Payments
    35 PartiallyCaptured The payment is partially captured. Yes Payments
    36 SuccessWaitForFraud No Payments
    37 ExceptionWaitForFraud No Payments
    38 Retrieval Retrieval request indicates that the customer wants more information about a transaction and inquires their issuing bank and asks for additional information on the charge, but hasn’t yet initiated a chargeback. Yes Chargebacks
    39 SoftDeclined A soft decline may occur when the issuing bank will not proceed with a transaction that require SCA and doesn’t meet these requirements. For more information see our dedicated section about: Strong Customer Authentication (SCA). Yes Payments

    * In exceptional cases it is possible to receive different notifications and your system should be able to handle such situations. If an additional notification is received with Success Status, it overwrites any previous notification.

    PSD2 and Strong Customer Authentication (SCA)

    The Second Payment Services Directive (PSD2), a set of laws and regulations for payment services in the European Union (EU) and the European Economic Area (EEA), has come with a lot of implications for marketplace business models already, and it will expand further more on all companies in Europe that deal with payments, ranging from how to regulate the emergence of Third Party Providers (TPPs) to the need for strong customer authentication (SCA).

    Strong Customer Authentication (SCA) has come into force starting with 14 September 2019 and all the transactions that did not comply with the new authentication guidelines have been declined by the banks.

    Strong Customer Authentication (SCA) has to be applied when all of the conditions below are met:

    • The business is based in the European Economic Area (EEA);
    • The customers are from EEA area;
    • The payment is initiated online by the customer.

    SCA requires merchants to integrate into the checkout flow a two-factor authentication that is based on the use of two or more elements categorized as:

    • knowledge (something only the user knows, i.e password);
    • possession (something only the user possesses: i.e, phone, token, certificate tec.);
    • inherence (something the user is: i.e. fingerprint, Face ID).

    For an authentication to meet the criteria of the PSD2, it must combine at least 2 of these 3 factors. To strongly authenticate an online payment, for example, consumers will be required to use their phone (something you own) and authenticate via fingerprint (something you are).

    As of September 14, only the credit card number alone was no longer considered as a valid authentication method and additional factors that meet the requirements of PSD2, such as biometric data, had to be added in the authentication process.

    The 3D Secure version 1.0 authentication method used for credit card payments is being updated to version 2.0, which is the best measure to meet the above compliance criteria.

    Apart from these cases there are a few exemptions to SCA, but keep in mind that banks can choose to not honor these exemptions and you need to be prepared to handle a SCA challenge even if the transactions has been submitted under one of the exemptions.

    Below is the list with the most relevant ones. For more detailed information, check out our dedicated section Exemptions to Strong Customer Authentication (SCA).

    Exemptions to Strong Customer Authentication (SCA)
    Exemption Description
    Low Value Small amounts less than 30 EUR: For a transaction of less than 30 EUR and up to 100 EUR accumulated or up to 5 transactions since the last SCA. Beyond 100 EUR or beyond 5 unauthenticated transactions, a new SCA is required. Keep in mind that since the information needed to validate these stipulations is only available to the issuing bank, you will still need to confirm if SCA is required on all transactions that might fall into this exemption category.
    Low Risk / TRA Transactional Risk Analysis: SCA can be deactivated for online payments between €30 and €500, depending on the payment providers fraud rates (see table below). There are no low-risk exemptions for transactions over €500. Merchants have to rely on a payment service provider (e.g. an acquirer) to act upon their request. In addition, the test to trigger the exemption rests with whether the PSP satisfies the prescribed conditions, not the merchants themselves. Nuvei keeps a very low fraud rate by using state of the art anti-fraud solutions such as RedShield, Machine Learning algorithms and by working with low risk acquiring banks which have very good fraud scores.
    MIT Merchant Initiated Transaction (MIT): are payment transactions that are not initiated by the payer but by the payee only and are not subject to strong customer authentication (SCA) to the extent that these transactions are initiated without any interaction or involvement of the payer. MIT transactions are subjected to SCA except when a mandate is signed by the client. For example, SEPA Direct Debits are initiated by the merchant but have a direct debit mandate signed by the end customer. Thus, SCA is not applicable in this case and there are no restrictions to the frequency or the amount (obtained scheme transaction identifier needs to be provided for use in the subsequent transactions).
    Trusted Beneficiaries Payment to a trusted beneficiary: Customers can add their preferred online sellers to a list of trusted beneficiaries held by the issuing bank, so that they don’t required to authenticate for each new payment. Please instruct your customers if possible to add your business to the white-list at their bank.
    Secure Corporate payments SCA can de deactivated for corporate card payments made through secure processes and protocols initiated by businesses and not available for consumers. Payments that are included in this category are those made through central travel accounts, lodged cards, virtual cards, and secure corporate cards, like the ones used in a corporate travel management system.

    Payout Notification

    We will notify you about the new status of the payout to the Notification URL you setup in the Merchant Dashboard. The format of the received notification has the same structure as the response of the initial request.

    You need to respond with HTTP code 204 (No Content)!

    Payout notification format:

    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Payout": {
        "ID": 4390,
        "Created": "20201216060630",
        "MerchantTransactionID": "s2ptest_a12",
        "Amount": "3",
        "Currency": "PLN",
        "MethodID": 12,
        "Description": "Test Payout",
        "SiteID": 30199,
        "Details": null,
        "Customer": {
          "ID": 2677591,
          "MerchantCustomerID": null,
          "Email": "test@test.com",
          "FirstName": "John",
          "LastName": "Smith",
          "Gender": null,
          "SocialSecurityNumber": null,
          "Phone": null,
          "Company": null,
          "DateOfBirth": null
        },
        "BillingAddress": {
          "ID": 13966,
          "City": "City",
          "ZipCode": "700000",
          "State": null,
          "Street": "Street",
          "StreetNumber": null,
          "HouseNumber": null,
          "HouseExtension": null,
          "Country": "PL"
        },
        "Status": {
          "ID": 2,
          "Info": "Success",
          "Reasons": null
        }
      }
    }

    Response:

    204 No Content
    • Pay With Crypto Payouts / Withdrawals (97) are processed almost instantly (within less than 2-3 minutes for most times) and the Amounts reaches the user Crypto Account within 10-15 minutes.

      Payout notification format:

      Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
      
      {
        "Payout": {
          "ID": 4989,
          "Created": "20210312154614",
          "MerchantTransactionID": "s2p_test_restcd156463",
          "Amount": "3000",
          "Currency": "EUR",
          "MethodID": 97,
          "Description": "Test Payout",
          "SiteID": 30201,
          "Details": null,
          "Customer": null,
          "BillingAddress": null,
          "Status": {
            "ID": 2,
            "Info": "Success",
            "Reasons": null
          },
          "MethodTransactionID": ""
        }
      }

      Response:

      204 No Content

    Get information on a specific Payout

    You can get information about a payout by using GET HTTP request.

    Definition: GET /v1/payouts/{id}

    Where:
    • {id} – GlobalPay Payout ID

    Request:

    GET https://paytest.smart2pay.com/v1/payouts/376
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=

    Response:

    HTTP/1.1 200 OK
    Content-Type: application/json; charset=utf-8
    
    {
        "Payout": {
            "ID": 376,
            "Created": "20190507131247",
            "MerchantTransactionID": "s2ptest_j1",
            "Amount": "1000",
            "Currency": "EUR",
            "MethodID": 1,
            "Description": null,
            "SiteID": 30201,
            "Details": null,
            "Customer": {
                "ID": 335,
                "MerchantCustomerID": "0125",
                "Email": "youremail@email.com",
                "FirstName": "Example",
                "LastName": "Test",
                "Gender": "F",
                "SocialSecurityNumber": "ABCDE1234F",
                "Phone": "0765260000",
                "Company": "S2P",
                "DateOfBirth": "19800519"
            },
            "BillingAddress": null,
            "Status": {
                "ID": 2,
                "Info": "Success",
                "Reasons": null
            }
        }
    }

    Create a Payout

    Definition: POST /v1/payouts

    The payment methods that support payouts are: SEPA Payouts (MethodID = 1), Trustly (MethodID = 29), P24 (MethodID = 12), Pay With Crypto (MethodID = 97), Interac Instant (MethodID = 100),Giropay (MethodID = 4),PayU (MethodID = 19),PayPal (MethodID = 94),Secure Bank Transfer (MethodID = 98),Open Banking (MethodID = 101),Qiwi Wallet (MethodID = 1003). Please keep in mind that is always mandatory to send the MethodID parameter in the payout request, otherwise the payout request will fail.

    To initiate a payout, you must create a payout object. The parameters of the payout are sent in the message body as a JSON object.

    A 201 HTTP response (Created) is returned if the payout was correctly initialized.

      • For SEPA Payouts (1) you need to send in the request the below parameters, including the Customer’s first and last name and Customer IBAN parameter.

        Request:

        POST https://paytest.smart2pay.com/v1/payouts
        Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
        
        {
          "Payout": {
            "MerchantTransactionID": "s2ptest_j1",
            "Amount": 2000,
            "Currency": "EUR",
            "MethodID": 1,
            "Customer": {
              "Email": "test@test.com",
              "FirstName": "John",
              "LastName": "Smith"
             },
            "BillingAddress": {
            "Country": "NL"
            },
            "Details": {
              "CustomerIBAN": "NL611904300234573201"
            }
          }
        }

        Response:

        HTTP/1.1 201 Created
        Content-Type: application/json; charset=utf-8
        
        {
          "Payout": {
            "ID": 376,
            "Created": "20200821131247",
            "MerchantTransactionID": "s2ptest_j1",
            "Amount": 2000,
            "Currency": "EUR",
            "MethodID": 1,
            "Description": null,
            "SiteID": 30201,
            "Customer": {
              "ID": 335,
              "MerchantCustomerID": null,
              "Email": "test@test.com",
              "FirstName": "John",
              "LastName": "Smith",
              "Gender": null,
              "SocialSecurityNumber": null,
              "Phone": null,
              "Company": null,
              "DateOfBirth": null
             },
            "BillingAddress": {
              "ID": 170,
              "City": null,
              "ZipCode": null,
              "State": null,
              "Street": null,
              "StreetNumber": null,
              "HouseNumber": null,
              "HouseExtension": null,
              "Country": "NL"
              },
             "Status": {
               "ID": 1,
               "Info": "Open",
               "Reasons": null
            }
          }
        }

      • For P24 Payouts (12) you need to send in the request the following parameters: Customer’s details first name, last name, email address and Customer IBAN parameter. Also, please send the Billing address parameters: Country, City, Street and ZipCode. These parameters will appear on the bank statement.

        Request:

        POST https://paytest.smart2pay.com/v1/payouts
        Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
        
        {
          "Payout": {
            "MerchantTransactionID": "s2ptest_a12",
            "Amount": 3,
            "Currency": "PLN",
            "Description": "Test Payout",
            "MethodID": "12",
            "Customer": {
              "Email": "test@test.com",
              "FirstName": "John",
              "LastName": "Smith"
             },
            "BillingAddress": {
              "City": "City",
              "ZipCode": "700000",
              "Street": "Street",
              "Country": "PL"
            },
            "Details": {
              "CustomerIBAN": "PL24109024027163352166834377"
              }
            }
          } 

        Response:

        HTTP/1.1 201 Created
        Content-Type: application/json; charset=utf-8
        
        {
            "Payout": {
                "ID": 4390,
                "Created": "20201216060630",
                "MerchantTransactionID": "s2ptest_a12",
                "Amount": "3",
                "Currency": "PLN",
                "MethodID": 12,
                "Description": "Test Payout",
                "SiteID": 30199,
                "Details": {
                    "CustomerIBAN": "PL24109024027163352166834377"
                },
                "Customer": {
                    "ID": 2677591,
                    "MerchantCustomerID": null,
                    "Email": "test@test.com",
                    "FirstName": "John",
                    "LastName": "Smith",
                    "Gender": null,
                    "SocialSecurityNumber": null,
                    "Phone": null,
                    "Company": null,
                    "DateOfBirth": null
                },
                "BillingAddress": {
                    "ID": 13966,
                    "City": "City",
                    "ZipCode": "700000",
                    "State": null,
                    "Street": "Street",
                    "StreetNumber": null,
                    "HouseNumber": null,
                    "HouseExtension": null,
                    "Country": "PL"
                },
                "Status": {
                    "ID": 1,
                    "Info": "Open",
                    "Reasons": null
                }
            }
        }

    For B2B payouts you can send in the request the Company parameter instead of FirstName and LastName parameters.

    Request:

    POST https://paytest.smart2pay.com/v1/payouts
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Payout": {
        "MerchantTransactionID": "s2ptest_j1",
        "Amount": 2000,
        "Currency": "EUR",
        "MethodID": 1,
        "Customer": {
          "Email": "test@test.com",
          "Company": "Test Company SRL"
         },
        "BillingAddress": {
        "Country": "NL"
        },
        "Details": {
          "CustomerIBAN": "NL611904300234573201"
        }
      }
    }

    Also, you can avoid sending each time the Customer and Country details by sending the CustomerID and BillingAddressID – the ones you receive in the initial Response.

    Request:

    POST https://paytest.smart2pay.com/v1/payouts
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Payout": {
        "MerchantTransactionID": "s2ptest_j1",
        "Amount": 2000,
        "Currency": "EUR",
        "MethodID": 1,
        "Customer": {
          "ID": 335
         },
        "BillingAddress": {
        "ID": 170
        },
        "Details": {
          "CustomerIBAN": "NL611904300234573201"
        }
      }
    }

    • For Trustly Payouts(29) you need to send in the request the Customer Bank Account ID parameter.

      Request:

      POST https://paytest.smart2pay.com/v1/payouts
      Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
      
      {
        "Payout": {
          "MerchantTransactionID": "s2ptest_j1",
          "Amount": 1000,
          "Currency": "EUR",      
          "MethodID": 29,
          "Customer": {    
            "Email": "youremail@email.com"   
          },
          "Details":{
            "CustomerBankAccountID": "3541977722"}
        }
      }

      Response:

      HTTP/1.1 201 Created
      Content-Type: application/json; charset=utf-8
      
      {
          "Payout": {
              "ID": 376,
              "Created": "20190507131247",
              "MerchantTransactionID": "s2ptest_j1",
              "Amount": "1000",
              "Currency": "EUR",           
              "MethodID": 29,
              "Description": null,
              "SiteID": 30201,
              "Details": {
                  "CustomerBankAccountID": "3541977722"
              },
              "Customer": {
                  "ID": 335,
                  "MerchantCustomerID": null,
                  "Email": "youremail@email.com",
                  "FirstName": null,
                  "LastName": null,
                  "Gender": null,
                  "SocialSecurityNumber": null,
                  "Phone": null,
                  "Company": null,
                  "DateOfBirth": null
              },
              "BillingAddress": null,
              "Status": {
                  "ID": 1,
                  "Info": "Open",
                  "Reasons": null
              }
          }
      }

    • For Pay With Crypto Payouts (97) you need to send in the request the mandatory parameters Crypto Address and Crypto Currency.

      Request:

      POST https://paytest.smart2pay.com/v1/payouts
      Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
      
      {
        "Payout": {
          "MerchantTransactionID": "s2p_test_restcd156462",
          "Amount": 3000,
          "Currency": "EUR",
          "Description": "Test Payout",
          "MethodID": "97",
          "Details": {
            "CryptoAddress": "0x9006203f86D7381a3d227fe54310C9fD4e2d1552",
            "CryptoCurrency": "ETH"
            }
          }
        }

      Response:

      HTTP/1.1 201 Created
      Content-Type: application/json; charset=utf-8
      
      {
          "Payout": {
              "ID": 4989,
              "Created": "20210312154614",
              "MerchantTransactionID": "s2p_test_restcd156462",
              "Amount": "3000",
              "Currency": "EUR",
              "MethodID": 97,
              "Description": "Test Payout",
              "SiteID": 30201,
              "Details": {
                  "CryptoAddress": "0x9006203f86D7381a3d227fe54310C9fD4e2d1552",
                  "CryptoCurrency": "ETH"
              },
              "Customer": null,
              "BillingAddress": null,
              "Status": {
                  "ID": 1,
                  "Info": "Open",
                  "Reasons": null
              },
              "MethodTransactionID": null
          }
      }

    • For Interac Instant Payouts (100) you also need to send in the request the mandatory parameters SecurityQuestion and SecurityAnswer together with the email address, name and phone number. We recommend that the MerchantCustomerID and the IPAddress to be sent although they are optional parameters. See below the full request of a payout with all the mandatory and optional parameters.

      Request:

      POST https://paytest.smart2pay.com/v1/payouts
      Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
      
      {
        "Payout": {
          "MerchantTransactionID": "s2p_test_214rtt5431645",
          "Amount": 100,
          "Currency": "CAD",
          "MethodID": 100,
          "Description": "from REST",
          "Customer": {
            "Email": "john@test.com", 
            "FirstName": "John", 
            "LastName": "Doe", 
            "Phone": "6135550104",
            "MerchantCustomerID": "test5"
          },
          "Details": {
            "SecurityQuestion": "What is your favorite city", 
            "SecurityAnswer": "Toronto", 
            "IPAddress": "1.2.3.4" 
          }
        }
      }
      

      Response:

      HTTP/1.1 201 Created
      Content-Type: application/json; charset=utf-8
      
      {
          "Payout": {
              "ID": 5569,
              "Created": "20210511082638",
              "MerchantTransactionID": "s2p_test_214rtt5431645",
              "Amount": "100",
              "Currency": "CAD",
              "MethodID": 100,
              "Description": "from REST",
              "SiteID": 30199,
              "Details": {
                  "SecurityQuestion": "What is your favorite city",
                  "SecurityAnswer": "Toronto",
                  "IPAddress": "1.2.3.4"
              },
              "Customer": {
                  "ID": 2721756,
                  "MerchantCustomerID": "test5",
                  "Email": "john@test.com",
                  "FirstName": "John",
                  "LastName": "Doe",
                  "Gender": null,
                  "SocialSecurityNumber": null,
                  "Phone": "6135550104",
                  "Company": null,
                  "DateOfBirth": null
              },
              "BillingAddress": null,
              "Status": {
                  "ID": 1,
                  "Info": "Open",
                  "Reasons": null
              },
              "MethodTransactionID": null
          }
      }

    In case of an API error, an HTTP 4xx (you did something wrong) or HTTP 5xx (we did something wrong) response is returned.

    For more information about the reasons of a wrong request response see our section GlobalPay Return Codes.

    Request:

    POST https://paytest.smart2pay.com/v1/payouts
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Payout": {
        "MerchantTransactionID": "s2ptest_j2",
        "Amount": 1000,
        "Currency": "EUR",      
        "Customer": {    
          "Email": "youremail@email.com"   
        },
        "Details":{
          "CustomerBankAccountID": "3541977722"
        }
      }
    }

    Response:

    HTTP/1.1 400 Bad Request
    Content-Type: application/json; charset=utf-8
    
    {
        "Payout": {
            "ID": 0,
            "Created": null,
            "MerchantTransactionID": "s2ptest_j2",
            "Amount": "1000",
            "Currency": null,
            "Description": null,
            "SiteID": 30201,
            "Details": {
                "CustomerBankAccountID": "3541977722"
            },
            "Customer": {
                "MerchantCustomerID": null,
                "Email": "youremail@email.com",
                "FirstName": null,
                "LastName": null,
                "Gender": null,
                "SocialSecurityNumber": null,
                "Phone": null,
                "Company": null,
                "DateOfBirth": null
            },
            "BillingAddress": null,
            "Status": {
                "ID": null,
                "Info": null,
                "Reasons": [
                    {
                        "Code": "1",
                        "Info": "Missing parameter - MethodID"
                    }
                ]
            }
        }
    }

    Disputes Details

    Go to Disputes tab from the dashboard and use the search filters to find a specific dispute. After you have found the transaction you have been looking for, using the search filters, just double click on it to see specific details of that dispute.

    A new window will open containing the general details for that Dispute ID and also providing details about specific sections, like: Reporting, Reason Codes and Initial Payment.

    The dashboard Dispute Details allows the user to always find specific information in order to be informed and keep track of his day-to-day operations and disputes.

    General provides detailed information for the following fields: ID of the dispute, Initial Payment ID, Input Date Time, Merchant ID, Merchant Site ID, Method ID, Merchant Alias, Merchant Site Alias, Method Name, Amount, Currency and Status.

    32

    Reporting provides detailed information for the following fields: Notification Date Time and Last Notified Status.

    32

    Reason Codes provides detailed information for the following fields: Reason Code and Reason.

    32

    Initial payment provides detailed information for the following fields: ID, Merchant Transaction ID, Originator Transaction ID, Input Date Time, Amount, Currency, Status, Available Amount, Method ID, Method Name and Country.

    32

    Disputes List

    Access the Disputes tab in order to see and verify your disputes. Here you will find a complete list of all of your payments that are disputed by the customer. You have the possibility to search for a specific dispute using different search filters, to see the details of the disputes, and to export your disputes into an Excel file.

    32

    Search filters

    When you access the Disputes tab, the Search Filters section is expanded. In order to collapse it just click the arrow on the right of the screen.

    You can search disputes by ID (the dispute id in the GlobalPay system), Initial Payment ID, Method, Amount, Currency, Status, Interval (from – to) and Site Alias.

    32

    Disputes Details

    After you have found the transaction you’ve been looking for, using the search filters, just click on it to see the specific details of that dispute.

    A new window will open containing the general details for that disputes ID and also providing details about specific sections, like: Reporting, Reason Codes, Initial Payment.

    66

    Export transactions

    The list of disputes can be exported (filtered or not) to an .xls file. Click on the Export to EXCEL button at the end of the list of payments.

    32

    The downloaded file contains the following information: ID, Input Date/Time, Payment ID, Originator Transaction ID, Amount, Currency, Status, Status ID, Method, Method ID, Site ID, Site Alias, Reason Code and Reason.

    32

    Preapprovals Details

    Go to Preapprovals tab from the dashboard and use the search filters to find a specific preapproval. After you have found the transaction you have been looking for, using the search filters, just double click on it to see specific details of that preapproval.

    A new window will open containing the general details for that Preapproval ID and also providing details about all the payments associated with that preapproval.

    The dashboard Preapprovals Details allows the user to always find specific information in order to be informed and keep track of his day-to-day operations and preapprovals.

    General provides detailed information for the following fields: ID of the preapproval, Merchant Preapproval ID, Status, Method ID,Site ID, Site Alias, Merchant Alias, Merchant ID, Input Date Time, Description, Details, Maximum Amount, Currency, Method Option ID, Frequency, Mandate Reference.

    32

    Payments contains a list of all the payments associated with that preapproval and provides detailed information for the payment’s following fields: Payment ID, Merchant Transaction ID, Amount, Currency, Status, Method, Root Provider Transaction ID, Site, Country.

    32

    Preapprovals List

    Access the Preapprovals tab in order to see and verify your preapprovals. Here you will find a complete list of all of your preapprovals. You have the possibility to search for a specific preapproval using different search filters, to see the details of the preapproval and all the payments associated with the preapproval.

    32

    Search filters

    When you access the Preapprovals tab, the Search Filters section is expanded. In order to collapse it just click the arrow on the right of the screen.

    You can search preapprovals by ID (the preapproval id in the GlobalPay system, a unique number that identifies the preapproval in the GlobalPay system; you will need to store this id in order to initiate recurring payments.), Merchant Preapproval ID (the preapproval id in your system), Status, Method, Site Alias and Interval (from – to).

    32

    Preapprovals Details

    After you have found the transaction you’ve been looking for, using the search filters, just click on it to see the specific details of that preapproval.

    A new window will open containing the general details for that Preapproval ID and also providing details about all the payments associated with that preapproval.

    32

    Capture scenarios for PostFinance Card

     

    Capture Scenarios Response Status Description Notification Status Description

    The transaction has been fully captured.

    Only payments with “Authorized” status (9) can be captured.
    Intermediary Status: 13 Capture Requested Final Notification Status: 2 Success

    The payment has been partially captured.

    Only payments with “Authorized” status can be partially captured. The payment has been sent out to be partially captured, but the payment gateway has not yet confirmed that the payment is successful.
    Intermediary Status: 13 Capture Requested Final Notification Status: 35 Partially Captured
    Capture Failed Scenarios Return Code Description

    Retry Capture

    This happens when the request timeouts at Provider; a new capture request has to be initiated.
    Return Code: 157 Unable to capture transaction

    The transaction could not be captured.

    The transaction is not in an Authorized status (it has already been fully Captured or Partially Captured).
    Return Code: 17 Payment is invalid

    For a complete list of all the possible Return Code IDs go to our section GlobalPay Return Codes.

    See the request – response examples for the above possible scenarios:

    • Success Status

      A payment can only be captured if it has an Authorized status. Once the payment has an Authorized status (9), you can capture either the full amount or a partial amount of the initial authorized amount for the transaction.

      A 200 HTTP response (OK) is returned if the request was completed successfully.

      Full capture means you capture the entire authorized amount for the initial transaction.

      Request:

      POST https://paytest.smart2pay.com/v1/payments/4424180/capture
      Authorization: Basic MzAxNTE6V05ydTJ5WnJpR2RtNVVMZWt4dFM4cHprUXNRSmdYYTZBZnlnT3FXZXcvNlRBYzNYK1A=

      Response:

      HTTP/1.1 200 OK
      Content-Type: application/json; charset=utf-8
      
      {
          "Payment": {
              "ID": 4424180,
              "SkinID": null,
              "ClientIP": null,
              "Created": "20190320121124",
              "MerchantTransactionID": "PostFinance_55EMI",
              "OriginatorTransactionID": null,
              "Amount": "1000",
              "Currency": "CHF",
              "CapturedAmount": null,
              "ReturnURL": "http://demo.smart2pay.com/redirect.php",
              "Description": null,
              "MethodID": 1129,
              "MethodOptionID": null,
              "IncludeMethodIDs": null,
              "ExcludeMethodIDs": null,
              "PrioritizeMethodIDs": null,
              "SiteID": 30151,
              "NotificationDateTime": "20190320121338",
              "Customer": null,
              "BillingAddress": {
                  "ID": 7808,
                  "City": null,
                  "ZipCode": null,
                  "State": null,
                  "Street": null,
                  "StreetNumber": null,
                  "HouseNumber": null,
                  "HouseExtension": null,
                  "Country": "CH"
              },
              "ShippingAddress": null,
              "Articles": null,
              "Details": null,
              "ReferenceDetails": null,
              "CustomParameters": null,
              "PreapprovalID": null,
              "Status": {
                  "ID": 13,
                  "Info": "CaptureRequested",
                  "Reasons": null
              },
              "MethodTransactionID": null,
              "TokenLifetime": 10,
              "Capture": null,
              "PreapprovalDetails": null,
              "RedirectURL": "https://apitest.smart2pay.com/Home?PaymentToken=FFABC0234D73F9D23DAC72E1DFC52E61.4424180"
          }
      }
      

      We will notify you about the new status of the payment to the Notification URL you setup in the Merchant Dashboard. The format of the received notification has the same structure as the response of the initial request.

      You need to respond with HTTP code 204 (No Content)!

      Payment notification format:

      Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
      
      {
        "Payment": {
          "ID": 4424180,
          "SkinID": null,
          "ClientIP": null,
          "Created": "20190320121124",
          "MerchantTransactionID": "PostFinance_55EMI",
          "OriginatorTransactionID": null,
          "Amount": "1000",
          "Currency": "CHF",
          "CapturedAmount": "1000",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "Description": "",
          "MethodID": 1129,
          "MethodOptionID": null,
          "IncludeMethodIDs": null,
          "ExcludeMethodIDs": null,
          "PrioritizeMethodIDs": null,
          "SiteID": 30151,
          "NotificationDateTime": null,
          "Customer": null,
          "BillingAddress": {
            "ID": 7808,
            "City": null,
            "ZipCode": null,
            "State": null,
            "Street": null,
            "StreetNumber": null,
            "HouseNumber": null,
            "HouseExtension": null,
            "Country": "CH"
          },
          "ShippingAddress": null,
          "Articles": null,
          "Details": null,
          "ReferenceDetails": null,
          "CustomParameters": null,
          "PreapprovalID": null,
          "Status": {
            "ID": 2,
            "Info": "Success",
            "Reasons": null
          },
          "MethodTransactionID": null,
          "TokenLifetime": 10,
          "Capture": null,
          "PreapprovalDetails": null,
          "RedirectURL": "https://apitest.smart2pay.com/Home?PaymentToken=FFABC0234D73F9D23DAC72E1DFC52E61.4424180"
        }
      }
      

    • Partially Captured Status

      Partial capture means you have the possibility to capture a smaller amount than the one from the initial authorized transaction. Partial capture is used when you have sent at least part of the order to the consumer and want to capture the amount for the item(s) that have been shipped.

      You can perform only one partial capture for an authorized transaction with the limitation that the amount of the partial capture to be smaller or equal than the initial authorized amount.

      Specify only the captured amount parameter in the query string, in order to partially capture the payment, like in the below example:

      Request:

      POST https://paytest.smart2pay.com/v1/payments/4424180/capture?amount=500
      Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=

      Response:

      HTTP/1.1 200 OK
      Content-Type: application/json; charset=utf-8
      
      {
          "Payment": {
              "ID": 4424180,
              "SkinID": null,
              "ClientIP": null,
              "Created": "20190320121124",
              "MerchantTransactionID": "PostFinance_55EMI",
              "OriginatorTransactionID": null,
              "Amount": "1000",
              "Currency": "CHF",
              "CapturedAmount": null,
              "ReturnURL": "http://demo.smart2pay.com/redirect.php",
              "Description": null,
              "MethodID": 1129,
              "MethodOptionID": null,
              "IncludeMethodIDs": null,
              "ExcludeMethodIDs": null,
              "PrioritizeMethodIDs": null,
              "SiteID": 30151,
              "NotificationDateTime": "20190320121338",
              "Customer": null,
              "BillingAddress": {
                  "ID": 7808,
                  "City": null,
                  "ZipCode": null,
                  "State": null,
                  "Street": null,
                  "StreetNumber": null,
                  "HouseNumber": null,
                  "HouseExtension": null,
                  "Country": "CH"
              },
              "ShippingAddress": null,
              "Articles": null,
              "Details": null,
              "ReferenceDetails": null,
              "CustomParameters": null,
              "PreapprovalID": null,
              "Status": {
                  "ID": 13,
                  "Info": "CaptureRequested",
                  "Reasons": null
              },
              "MethodTransactionID": null,
              "TokenLifetime": 10,
              "Capture": null,
              "PreapprovalDetails": null,
              "RedirectURL": "https://apitest.smart2pay.com/Home?PaymentToken=FFABC0234D73F9D23DAC72E1DFC52E61.4424180"
          }
      }
      

      We will notify you about the new status of the payment to the Notification URL you setup in the Merchant Dashboard. The format of the received notification has the same structure as the response of the initial request.

      You need to respond with HTTP code 204 (No Content)!

      Payment notification format:

      Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk={
        "Payment": {
          "ID": 4424180,
          "SkinID": null,
          "ClientIP": null,
          "Created": "20190320121124",
          "MerchantTransactionID": "PostFinance_55EMI",
          "OriginatorTransactionID": null,
          "Amount": "1000",
          "Currency": "CHF",
          "CapturedAmount": null,
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "Description": "",
          "MethodID": 1129,
          "MethodOptionID": null,
          "IncludeMethodIDs": null,
          "ExcludeMethodIDs": null,
          "PrioritizeMethodIDs": null,
          "SiteID": 30151,
          "NotificationDateTime": null,
          "Customer": null,
          "BillingAddress": {
            "ID": 7808,
            "City": null,
            "ZipCode": null,
            "State": null,
            "Street": null,
            "StreetNumber": null,
            "HouseNumber": null,
            "HouseExtension": null,
            "Country": "CH"
          },
          "ShippingAddress": null,
          "Articles": null,
          "Details": null,
          "ReferenceDetails": null,
          "CustomParameters": null,
          "PreapprovalID": null,
          "Status": {
            "ID": 35,
            "Info": "PartiallyCaptured",
            "Reasons": null
          },
          "MethodTransactionID": null,
          "TokenLifetime": 10,
          "Capture": null,
          "PreapprovalDetails": null,
          "RedirectURL": "https://apitest.smart2pay.com/Home?PaymentToken=FFABC0234D73F9D23DAC72E1DFC52E61.4424180"
        }
      }
      

    • Return Code: 157 – Unable to capture transaction

      The transaction could not be captured. Retry Capture. This happens when the request timeouts at Provider.

      Request:

      POST https://paytest.smart2pay.com/v1/payments/4426277/capture
      Authorization: Basic MzAxNTE6V05ydTJ5WnJpR2RtNVVMZWt4dFM4cHprUXNRSmdYYTZBZnlnT3FXZXcvNlRBYzNYK1A=

      Response:

      HTTP/1.1 400 Bad Request
      Content-Type: application/json; charset=utf-8
      
      {
          "Payment": {
              "ID": 4426277,
              "SkinID": null,
              "ClientIP": null,
              "Created": "20190322135942",
              "MerchantTransactionID": "s2ptest_a3",
              "OriginatorTransactionID": null,
              "Amount": "1000",
              "Currency": "CHF",
              "CapturedAmount": null,
              "ReturnURL": "http://demo.smart2pay.com/redirect.php",
              "Description": "test test",
              "MethodID": 1129,
              "MethodOptionID": null,
              "IncludeMethodIDs": null,
              "ExcludeMethodIDs": null,
              "PrioritizeMethodIDs": null,
              "SiteID": 30151,
              "NotificationDateTime": "20190322140025",
              "Customer": null,
              "BillingAddress": null,
              "ShippingAddress": null,
              "Articles": null,
              "Details": null,
              "ReferenceDetails": null,
              "CustomParameters": null,
              "PreapprovalID": null,
              "Status": {
                  "ID": 9,
                  "Info": "Authorized",
                  "Reasons": [
                      {
                          "Code": "157",
                          "Info": "Unable to capture transaction"
                      }
                  ]
              },
              "MethodTransactionID": null,
              "TokenLifetime": null,
              "Capture": null,
              "PreapprovalDetails": null,
              "RedirectURL": null
          }
      }

    • Return Code: 17 – Payment is invalid

      The transaction could not be captured. The transaction is not in an Authorized status. You can receive this response when the payment you want to Capture is not Authorized or when the payment has already been Captured.

      Request:

      POST https://paytest.smart2pay.com/v1/payments/4426219/capture
      Authorization: Basic MzAxNTE6V05ydTJ5WnJpR2RtNVVMZWt4dFM4cHprUXNRSmdYYTZBZnlnT3FXZXcvNlRBYzNYK1A=

      Response:

      HTTP/1.1 400 Bad Request
      Content-Type: application/json; charset=utf-8{
          "Payment": {
              "ID": 4426219,
              "SkinID": null,
              "ClientIP": null,
              "Created": "20190322125640",
              "MerchantTransactionID": null,
              "OriginatorTransactionID": null,
              "Amount": null,
              "Currency": null,
              "CapturedAmount": null,
              "ReturnURL": null,
              "Description": null,
              "MethodID": 1129,
              "MethodOptionID": null,
              "IncludeMethodIDs": null,
              "ExcludeMethodIDs": null,
              "PrioritizeMethodIDs": null,
              "SiteID": 30151,
              "NotificationDateTime": null,
              "Customer": null,
              "BillingAddress": null,
              "ShippingAddress": null,
              "Articles": null,
              "Details": null,
              "ReferenceDetails": null,
              "CustomParameters": null,
              "PreapprovalID": null,
              "Status": {
                  "ID": 13,
                  "Info": "CaptureRequested",
                  "Reasons": [
                      {
                          "Code": "17",
                          "Info": "Payment is invalid - 4426219"
                      }
                  ]
              },
              "MethodTransactionID": null,
              "TokenLifetime": null,
              "Capture": null,
              "PreapprovalDetails": null,
              "RedirectURL": null
          }
      }

    PayTM Test Data

    For PayTM payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    PayTM – Test Payment Flow

    1. The customer enters his Email Address, Name and Permanent account number (PAN).
      Please note that for India the CustomerSocialSecurityNumber parameter consists of PAN. For more information about the PAN please click here.

      1 Enter customer details

    2. The customer is redirected to the PayTM Wallet where he needs to add the mobile number registered for the wallet account.1 Login
    3. The Customer checks the payment resume and confirms the payment by clicking on the Pay now button.1 Confirm payment
    4. Payment is processed. Once confirmed, the customer is routed back to order confirmation. The customer receives a message that the payment has been completed correctly.1 Process payment
    5. Upon completion of the payment flow the customer is redirected back to your ReturnURL.1 Return page when the redirection status is a success

    PostFinance e-finance Test Data

    For PostFinance e-finance payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    PostFinance e-finance Payment Flow

    1. The customer enters his e-finance number or usernames and password. For customers with several users (e.g. partner account): they need to enter their user ID as well. He confirms by using Next button.

      1 Login details

    2. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    PostFinance Card Test Data

    For PostFinance Card payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    PostFinance Card Payment Flow

    1. The customer has the possibility to pay via PostFinance App or via his PostFinance Card.

      1 ID Number

    2. If the customer chooses to pay with the PostFinance App, he uses the QR code for registration with the PostFinance App. He starts the PostFinance and selects “Pay in online shops” via the menu in the top left.

      1 ID Number

    3. If the customer chooses to pay with his PostFinance Card, he enters his ID number and continues the payment.

      1 ID Number

    4. The customer enters his Card Number. He finalizes the payment by using the Pay button.

      1 Card number

    5. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    Reporting

    1. Nuvei generates a daily transactional report file for the Marketplace. The transactional report file contains the following information:

      ID
      ID
      Definition
      The ID of the transaction in Smart2Pay system
      Type
      int
      : The ID of the transaction in Nuvei system;

      MerchantTransactionID
      MerchantTransactionID
      Definition
      Merchant Transaction ID, a number that uniquely identifies a transaction in your system.
      Type
      string
      : Merchant Transaction ID, a number that uniquely identifies a transaction in your system;

      OriginatorTransactionID
      OriginatorTransactionID
      Definition
      The ID of the transaction/refund in The Marketplace system
      Type
      string
      : The ID of the transaction/refund in The Marketplace system;

      InputDateTime
      InputDateTime
      Definition
      The date and time of inserting the transaction in Smart2Pay system
      Type
      datetime
      : The date and time of inserting the transaction in Nuvei system;

      PaymentStateDefID
      PaymentStateDefID
      Definition
      The ID of the payment status in Smart2Pay system. It can have the following values: 1 - Open, 2 - Success, 3 - Cancelled, 4 - Failed, 5 - Expired, 9 - Authorized, 11 - Captured.
      : The status id of the transaction in Nuvei system;

      Status
      Status
      Definition
      The description of the transaction status in the Smart2Pay system: Open (Pending), Success (not used for card payments), Cancelled, Failed, Expired, Authorized, Captured.
      : The description of the transaction status in the Nuvei system;

      MerchantAmount
      MerchantAmount
      Definition
      The amount of the transaction.
      Type
      float
      : The amount of the transaction;

      MerchantCurrency
      MerchantCurrency
      Definition
      The currency of the transaction. ISO 4217 format (e.g. EUR)
      : The currency of the transaction;

      CapturedAmount
      CapturedAmount
      Definition
      The amount that has been captured. Float with 2 decimals (e.g. 33.99)
      Type
      float
      : The amount that has been captured;

      MethodID
      MethodID
      Definition
      The ID of the payment methods used. For credit cards payments the ID is 6.
      Type
      int
      : The ID of the payment methods used. For credit cards payments this is 6.;

      MethodName
      MethodName
      Definition
      The name of the payment method used: SmartCards.
      : The name of the payment method used.;

      ReportedByBOTOperatorDate
      ReportedByBOTOperatorDate
      Definition
      The date when the transaction was exported to CSV file.
      Type
      datetime
      : The date when the transaction was exported to csv file;

      SpecificDetails
      SpecificDetails
      Definition
      Specific Details
      : Not used;

      ReconciliationProviderID
      ReconciliationProviderID
      Definition
      The ID that appears on the bank statement of the customer (usually same as RootProviderTransactionID).
      Type
      string
      : ID appearing on the bank statement of the customer (usually same as RootProviderTransactionID);

      ProviderTransactionID
      ProviderTransactionID
      Definition
      Provider Transaction ID
      : Not used for card payments;

      MerchantAlias
      MerchantAlias
      Definition
      The name of the Shop.
      Type
      string
      : Shop Name;

      RootProviderTransactionID
      RootProviderTransactionID
      Definition
      The ID of the payment in acquiring system.
      Type
      string
      : ID of the payment in acquiring system;

      Country
      Country
      Definition
      The country of the payer if available. ISO_3166-1_alpha-2 format. (e.g. IT).
      : The country of the payer if available.

    2.  

    3. Nuvei will generate a Settlement invoice report containing information at transaction level for each shop. The Settlement invoice report contains the following information:

      1 Settlement invoice report per shop

      GPaymentId
      GPaymentId
      Definition
      GPaymentId
      : Not used;

      PaymentId
      PaymentId
      Definition
      The ID of the payment in Smart2Pay system.
      Type
      int
      : PaymentID in Nuvei system;

      Type
      Type
      Definition
      Transaction Type. It can be type: Payment, Refund, Inquiry or Chargeback.
      Type
      string
      : Transaction Type. Can be Payment, Refund, Inquiry or Chargeback;

      PaymentMethodName
      PaymentMethodName
      Definition
      The name of the payment method used. E.g. SmartCards
      Type
      string
      : Name of the payment method used;

      CustomerName
      CustomerName
      Definition
      The name of the customer, if available.
      Type
      string
      : The name of the customer, if available;

      MerchantName
      MerchantName
      Definition
      The name of the merchant account.
      Type
      string
      : The name of the merchant account;

      MerchantID
      MerchantID
      Definition
      The ID of the transaction/refund in your system.
      Type
      string
      : The transaction/refund id in your system;

      GtId
      GtId
      Definition
      GtId
      : Not used;

      IssuerName
      IssuerName
      Definition
      Issuer Name
      : Not used;

      IdealTrxId
      IdealTrxId
      Definition
      IdealTrxId
      : Not used;

      Country
      Country
      Definition
      The country of the payer, if available. ISO_3166-1_alpha-2 format. (e.g. IT).
      : The country of the payer, if available;

      InputDateTime
      InputDateTime
      Definition
      The date and time of inserting the transaction in Smart2Pay system.
      Type
      datetime
      : The date and time of inserting the transaction in Nuvei system;

      Amount
      Amount
      Definition
      The amount of the transaction.
      Type
      float
      : The amount of the transaction;

      Currency
      Currency
      Definition
      The currency of the transaction. ISO 4217 format (e.g. EUR).
      : The currency of the transaction;

      Status
      Status
      Definition
      The description of the transaction status in the Smart2Pay system: Open (Pending), Success (not used for card payments), Cancelled, Failed, Authorized, Captured
      : The description of the transaction status in the Nuvei system;

      ExchangeRate
      ExchangeRate
      Definition
      The exchange rate if the transaction needs to be converted from transaction currency to the settlement currency.
      Type
      float
      : The exchange rate if the transaction needs to be converted from transaction currency to the settlement currency;

      CalculatedAmount
      CalculatedAmount
      Definition
      The transaction amount converted to the settlement currency.
      Type
      float
      : The transaction amount converted to the settlement currency;

      ReferenceCurrency
      ReferenceCurrency
      Definition
      The settlement currency.
      Type
      float
      : The settlement currency;

      TransactionFee
      TransactionFee
      Definition
      Gateway fee (if applies).
      Type
      float
      : Gateway fee (if applies);

      GeneralFee
      GeneralFee
      Definition
      Gateway fee (if applies)
      Type
      float
      : Gateway fee (if applies);

      AttemptFee
      AttemptFee
      Definition
      Gateway fee (per attempt, if applies).
      Type
      float
      : Gateway fee (per attempt, if applies);

      IssuedFee
      IssuedFee
      Definition
      Gateway fee (per acquiring bank/payment method provider attempt fee if applies).
      Type
      float
      : Gateway fee (per acquiring bank/payment method provider attempt fee if applies);

      LocalVatFee
      LocalVatFee
      Definition
      Local payment method VAT (if applies).
      Type
      float
      : Local payment method VAT (if applies);

      VAT
      VAT
      Definition
      Value added tax (if applies).
      Type
      float
      : Value added tax (if applies);

      Comission
      Comission
      Definition
      Commission of the marketplace/agent (if applies).
      Type
      float
      : Commission of the marketplace/agent (if applies);

      SiteID
      SiteID
      Definition
      The ID of the shop.
      Type
      int
      : ID of the shop;

      SiteAlias
      SiteAlias
      Definition
      Shop Alias.
      Type
      string
      : Shop Alias;

      OriginatorTransactionID
      OriginatorTransactionID
      Definition
      The ID of the transaction/refund in The Marketplace system.
      Type
      string
      : The ID of the transaction/refund in The Marketplace system.
    4.  

    5. Nuvei will also generate an aggregated Settlement invoice report containing information at transaction level for the Marketplace. Settlement of the commission will be based on this settlement invoice. Format is the same as in the Settlement invoice report above.

    Below there are examples of Settlement invoice reports in all supported formats:

    Marketplace Operator Invoice

    The total payout amount to the marketplace operator is computed using the below algorithm.

    Algorithm: TPM (total payout marketplace) = CO – D2

    Where:
    • CO (commission amount) = B + C – A2 – A3
    • OR (Operator Remitted fees) = E – A4
    • B, C, A2, A3 – as defined in Shop Settlement Invoices section
    • D2 (Acquiring Fees) = TBD_FIXED_FEE + TBD_%_FEE * CO

    Shop Settlement Invoices

    The total payout amount to be paid to the shop is computed using the below algorithm.

    Algorithm: TPS (total payout shop) = TA – D2

    Where:
    • TA (transfer_amount) = A – B – R – C – D1
    • A (order/taxes/fees) = A1 + A2 + A3
    • A1 = ORDER_AMOUNT + ORDER_SHIPPING_AMOUNT + ORDER_AMOUNT_TAX + ORDER_SHIPPING_AMOUNT_TAX
    • A2 = REFUND_COMMISSION_FEE (return the commission back to shop in case of a refund) + REFUND_COMMISSION_VAT
    • A3 = MANUAL_CREDIT + MANUAL_CREDIT_VAT
    • A4 = OPERATOR_REMITTED_REFUND_ORDER_AMOUNT_TAX + OPERATOR_REMITTED_REFUND_ORDER_SHIPPING_AMOUNT_TAX
    • B (operator commission) = COMMISION_FEE + COMMISION_VAT
    • R(refunds) = REFUND_ORDER_AMOUNT + REFUND_ORDER_SHIPPING_AMOUNT + REFUND_ORDER_AMOUNT_TAX + REFUND_ORDER_SHIPPING_AMOUNT_TAX
    • C (non transactional fees) = SUBSCRIPTION_FEE + SUBSCRIPTION_VAT + MANUAL_INVOICE + MANUAL_INVOICE_VAT
    • D1 (Acquiring Fees) = FIXED_FEE + %_FEE * A1
    • D2 (Settlement Fees) = FIXED_FEE + %_FEE * TA
    • E (Operator Remitted fees) = OPERATOR_REMITTED_ORDER_AMOUNT_TAX + OPERATOR_REMITTED_REFUND_ORDER_SHIPPING_AMOUNT_TAX

    Pre-Settlement Transaction API

    Information about all the transactions created or updated within a certain interval can be retrieved by using an action based on GET HTTP request. The response will contain a transaction list in JSON format that returns all the transactions that were created or updated in the interval start_date – end_date.

    Only a limited amount of details for each transaction will be provided.

    Definition: GET /v1/transactions?{start_date}&{end_date}

    Where:
    • {start_date} – format: {Year(4)}-{month(2)}-{day(2)}T{Hour(2)}:{Minute(2)}:{Second(2)}Z)
    • {end_date} – format: {Year(4)}-{month(2)}-{day(2)}T{Hour(2)}:{Minute(2)}:{Second(2)}Z)

    Request Model:

    GET /v1/transactions?{start_date}&{end_date}
    Authorization: Basic Pre-shared-APIKEY

    Response Model:

    {
        "transactions": [
            {
                "amount": 0.80,
                "currency": "EUR",
                "date_created": "2018-09-17T12:55:08Z",
                "last_updated": "2018-10-12T00:00:30Z",
                "cart_id": 1234,
                "order_id": "34991440-A",
                "order_line_id" : "34991440-A-1",
                "payment_state": "PAID",
                "payment_batch_number": "000068",
                "refund_id": null,
                "seller_id": 6221,
                "seller_name": "Best Shop",
                "transaction_type": "COMMISSION_VAT"
            },
            {
                "amount": 3.33,
                "currency": "EUR",
                "date_created": "2018-09-17T12:55:08Z",
                "last_updated": "2018-10-12T00:00:30Z",
                "cart_id": 1235,
                "order_id": "34991440-A",
                "order_line_id" : "34991440-A-1",
                "payment_state": "PAID",
                "payment_batch_number": "000068",
                "refund_id": null,
                "seller_id": 6221,
                "seller_name": "Best Shop",
                "transaction_type": "COMMISSION_FEE"
            },
            {
                "amount": 0,
                "currency": "EUR",
                "date_created": "2018-09-17T12:55:08Z",
                "last_updated": "2018-10-12T00:00:30Z",
                "cart_id": 1236,
                "order_id": "34991440-A",
                "order_line_id" : "34991440-A-1",
                "payment_state": "PAID",
                "payment_batch_number": "000068",
                "refund_id": null,
                "seller_id": 6221,
                "seller_name": "Best Shop",
                "transaction_type": "ORDER_SHIPPING_AMOUNT"
            },
            {
                "amount": 10.00,
                "currency": "EUR",
                "date_created": "2018-09-17T12:55:08Z",
                "last_updated": "2018-10-12T00:00:30Z",
                "cart_id": 1237,
                "order_id": "34991440-A",
                "order_line_id": "34991440-A-1",
                "payment_state": "PAID",
                "payment_batch_number": "000068",
                "refund_id": null,
                "seller_id": 6221,
                "seller_name": "Best Shop",
                "transaction_type": "ORDER_AMOUNT"
            },
            {
                "amount": 1.60,
                "currency": "EUR",
                "date_created": "2018-09-17T12:55:08Z",
                "last_updated": "2018-10-12T00:00:30Z",
                "cart_id": 1238,
                "order_id": "34991440-A",
                "order_line_id" : "34991440-A-2",
                "payment_state": "PAID",
                "payment_batch_number": "000068",
                "refund_id": null,
                "seller_id": 6221,
                "seller_name": "Best Shop",
                "transaction_type": "COMMISSION_VAT"
            },
            {
                "amount": 6.66,
                "currency": "EUR",
                "date_created": "2018-09-17T12:55:08Z",
                "last_updated": "2018-10-12T00:00:30Z",
                "cart_id": 1239,
                "order_id": "34991440-A",
                "order_line_id" : "34991440-A-2",
                "payment_state": "PAID",
                "payment_batch_number": "000068",
                "refund_id": null,
                "seller_id": 6221,
                "seller_name": "Best Shop",
                "transaction_type": "COMMISSION_FEE"
            },
            {
                "amount": 0,
                "currency": "EUR",
                "date_created": "2018-09-17T12:55:08Z",
                "last_updated": "2018-10-12T00:00:30Z",
                "cart_id": 1240,
                "order_id": "34991440-A",
                "order_line_id" : "34991440-A-2",
                "payment_state": "PAID",
                "payment_batch_number": "000068",
                "refund_id": null,
                "seller_id": 6221,
                "seller_name": "Best Shop",
                "transaction_type": "ORDER_SHIPPING_AMOUNT"
            },
            {
                "amount": 10.00,
                "currency": "EUR",
                "date_created": "2018-09-17T12:55:08Z",
                "last_updated": "2018-10-12T00:00:30Z",
                "cart_id": 1241,
                "order_id": "34991440-A",
                "order_line_id" : "34991440-A-2",
                "payment_state": "PAID",
                "payment_batch_number": "000068",
                "refund_id": null,
                "seller_id": 6221,
                "seller_name": "Best Shop",
                "transaction_type": "ORDER_AMOUNT"
            }
        ],
        "total_count": 8
    }
    
    

    The transaction_type field contains the following information:

    • COMMISSION_VAT
    • COMMISSION_FEE
    • ORDER_SHIPPING_AMOUNT
    • ORDER_AMOUNT
    • MANUAL_CREDIT
    • MANUAL_CREDIT_VAT
    • ORDER_AMOUNT_TAX
    • ORDER_SHIPPING_AMOUNT_TAX
    • REFUND_ORDER_AMOUNT
    • REFUND_ORDER_SHIPPING_AMOUNT
    • REFUND_COMMISSION_FEE
    • REFUND_COMMISSION_VAT
    • REFUND_ORDER_AMOUNT_TAX
    • REFUND_ORDER_SHIPPING_AMOUNT_TAX
    • SUBSCRIPTION_FEE
    • SUBSCRIPTION_VAT
    • CHARGE_ALL_FEES_INSTRUCTIONS

    Only the transactions with payment_state = “PAID” will be settled in the current settlement cycle.

    Settlement Flow

    Settlement cycles are defined in Nuvei system. Based on this, Nuvei generates settlement invoices for each shop. Also, Nuvei generates a commission settlement invoice for The Marketplace.

    The acquiring banks and alternative payment method providers settle to Nuvei the (Gross amount – Acquiring/Processing Fees).

    • Nuvei settles gross amount – operator commission – acquiring fees to each shop. Settlement frequency: weekly.
    • Nuvei settles commission to The Marketplace based on Transaction Log API exposed by the Marketplace. Settlement frequency: weekly.

    Optional functionalities:

    • Subscription fee can be collected by Nuvei from the shops on behalf of the marketplace operator.
    • Manual credits / debits will be issued by The Marketplace towards the shops and performed by Smart2Pay.
    • The Marketplace can withhold the payment of certain transactions towards the shop (e.g. only the transactions with PaymentStatus marked as PAID will be settled).

    Reconciliation

    Nuvei reconciles at transaction level with the acquiring banks and alternative method providers.

    The SiteID / APIKEY will be used to initiate the transactions towards Smart2Pay. The Marketplace Transaction ID needs to be submitted by Nuvei REST API in the OriginatorTransactionID field for reporting and reconciliation purposes towards the shops / Marketplace.

    Transactional Flow

    Orders containing items from multiple shops will be sent for authorization in multiple transactions, each transaction containing items for a single shop.

    Credit card transactions are authorized and their status is communicated on the following route: Acquirer -> Nuvei -> Marketplace.

    Transactions are manually captured within 7 days from authorization.

    Tokenization, 3D and fraud prevention solutions are available upon request. For more information visit: Credit Card Payments.

    Alternative payment methods are authorized and captured in one step and their status is communicated on the following route: Payment method provider -> Nuvei -> Marketplace.

    You need to integrate our REST API described here: https://docs-apm.nuvei.com.

    Nuvei Android SDK Instructions for Credit Cards (Java)

    The interaction flow is described next:

    1. Upon order initiation form the customer
    2. Your server asks our server for a temporary API Key at entry point api/authorization/apikey:

      Request:

      POST https://securetest.smart2pay.com/v1/authorization/apikey
      Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    3. Our server responds with a temporary API Key:

      Response:

      HTTP/1.1 201 Created
      Content-Type: application/json; charset=utf-8
      
      {
        "ApiKey": {
          "Value": "MzAwMDc6M2FkODVhYzctNjhlNS00MTA2LTliNjctNTg3MmM1ZmI2ZDNiLTYzMzA=",
          "Created": "20181206141407",
          "LifeTime": 30,
          "AccessCounterLimit": 10,
          "Status": {
            "ID": 2,
            "Info": "Success",
            "Reasons": []
          }
        }
      }

    4. The temporary API Key must be passed to the app.
    5. From the app you collect the credit cards details from which you build a CardAuthenticationRequest object, together with the temporary API key obtained in the previous step. Set callback functions to handle Success and Failure cases.
      CardAuthenticationRequest cardAuthenticationRequest = new CardAuthenticationRequest("Basic " + apiKey, true);
      
      HashMap card = new HashMap();
      card.put("HolderName", ((EditText)findViewById(R.id.e_cardholder_name)).getText().toString());
      card.put("Number", ((EditText)findViewById(R.id.e_cc_number)).getText().toString());
      card.put("ExpirationMonth", ((EditText)findViewById(R.id.e_exp_month)).getText().toString());
      card.put("ExpirationYear", ((EditText)findViewById(R.id.e_exp_year)).getText().toString());
      card.put("SecurityCode", ((EditText)findViewById(R.id.e_cvv)).getText().toString());
      
      cardAuthenticationRequest.setRequestBody(CCAuthenticateRequestBodyBuilder.getBody(card));
      cardAuthenticationRequest.setCallback((new CardAuthenticationRequest.Callback() {
          public void onSuccess(@NonNull final String creditCardToken) {
              // Authorization was successful!
              // Send it to your server and initiate a transactions via REST API: https://docs-apm.nuvei.com/category/direct-card-processing/one-click-payment/
              Log.d("TokenForCreditCard", creditCardToken);
              runOnUiThread(new Runnable() {
                  @Override
                  public void run() {
                      displayDebugInfo("Credit Card Token:" + creditCardToken);
                  }
              });
          }
      
          public void onFailure() {
              Log.w(TAG,"Card Authentication request failed.");
              runOnUiThread(new Runnable() {
                  @Override
                  public void run() {
                      displayDebugInfo("Card Authentication request failed.");
                  }
              });
          }
      }));
      cardAuthenticationRequest.enqueue();
      
    6. Our SDK calls our server with these details.
    7. The server responds with a token to our SDK.
    8. Our SDK passed the token back to your APP via the callback function setup in step 5.
    9. The order can now be submitted from the app to your server together with the token
    10. A credit card transaction using token is now initiated from your server. For more details go to: Recurring Card Payments section. You can store the token on your server for subsequent purchases.
    11. Our server responds to your server with the Authorization result. Upon a successful result you can release the goods or services.
    12. You pass the payment result to the app.

    SDK is now fully functional in your app!

    Nuvei iOS SDK Instructions (Swift)

    Now that you have imported the Smart2Pay.SDK package into your app, you need to follow the below steps in order to set up the Mobile SDK for iOS in Swift language.

    1. To get back to the app after doing a payment we need to set an URL Scheme.

      Select the Project icon again in your file hierarchy – make sure you are in the Info tab – URL Types.

      Fold it open and click the + button. You only need to set URL Schemes field. For example, you can use your bundle identifier. This ensures that there’s no other app that uses this URL Scheme.

      We’re all set to make a payment now!

    2. Create a payment from the data you’ve attained from the API.

      
      ```
      Let payment = Payment(id: id)
      payment.amount = 100 // This is in cents
      payment.currency = "CNY" // Use the three letter abbreviation
      payment.type = .ALIPAY // or .WECHAT 
      payment.delegate = this // The current view controller with PaymentManagerDelegate implementation
      let paymentManager = PaymentManager("urlscheme from step 4")
      paymentManager.pay(payment)
      ```
      
    3. Make sure the view controller uses the delegate implementation:

      PaymentManager.PaymentManagerDelegate

      For example, your view controller could look like this:

      
      `
      class ViewController: UIViewController, PaymentManagerDelegate {
      `
      

      To get the callbacks from the Payment Manager you need to add these two functions:

      
      ```
      func onPaymentSuccess(_ payment: Payment, _ body: [String: Any]) {
      }
          
      func onPaymentFailure(_ payment: Payment) {
      }
      ```
      

      The information needed is inside the payment. This is the structure of a Payment:

      
      ```
      class Payment {
         enum PaymentProvider: Int {
              case NONE = 0
              case ALIPAY = 24
              case WECHAT = 1066
          }
          var id: Int = 0
          var type = PaymentProvider.NONE
          var amount: Int = 0
          var currency: String = ""
          var instructions: String = "" 
          var delegate: PaymentManagerDelegate?
      }
      ```
      

    SDK is now fully functional in your app!

    Nuvei iOS SDK Installation

    You need to follow the below steps to build an in-app payment flow fully functional using Nuvei SDK in your iOS app using Swift.

    1. Download the Smart2Pay.framework.
    2. Import the framework into your project by either dragging it into the project or go to File | Add files to “project name”.
    3. Add the framework to the Embedded Binaries. Select the Project icon in your file hierarchy – make sure you are in the General tabEmbedded Binaries.

      There are three scenarios possible do the one that applies to you:

      • If you don’t see it in “Embedded Binaries” and don’t see it in the “Linked Frameworks and Libraries”, just click the + on “Embedded Binaries” and select the Smart2Pay.framework.
      • If you see it in “Linked Frameworks and Libraries” but not in “Embedded Binaries”, you should first remove it from “Linked Frameworks and Libraries” and click the + on “Embedded Binaries” and select the Smart2Pay.framework. This will automatically add it to both.
      • If you see it in both “Embedded Binaries” and “Linked Frameworks and Libraries”, you don’t need to do anything.

    Now that the SDK is in the app we can actually use it in the code. Continue with setting up the SDK: Nuvei iOS SDK Instructions (Swift).

    Shop Approval Notification

    Whenever a shop is approved in Nuvei onboarding system, a notification is sent from Nuvei to the Marketplace to a page where the following info is send, and whether it was successful or not.

    The Marketplace needs to respond with HTTP return code 204 (No Content) otherwise the approval will be resubmitted!

    Definition: POST /api/shop/{ID}/notification

    Where:
    • {ID} – ID of the shop

    Shop Approval Notification Format:

    {
        "merchant_site": {
            "shop_id": Int,
            "site_id": Int (eg. 31261),
            "api_key": "SmasdsPx6n2KJU9MNKcBdlqdLJZOXSl9IA/kdksjSsdDWD",
            "created": "Date (yyyy-mm-dd hh:mm:ss, eg. 2018-12-31 23:59:59)",
            "url": "http://www.johnshop.it",
        }
    }
    
    

    Response:

    204 No Content

    We recommend you to always verify the Notification content we sent and not just simply/automatically respond to our notifications.

    In exceptional cases it is possible to receive duplicate notifications and your system should be able to handle such situations.

    If you do not respond to the notifications of type Approval or our system will keep sending the notifications until it receives a response. At first you will be notified more often. Once the time passes the notifications from our system will be rare and they will eventually stop (after a period of time defined in our system, currently set to 7 days).

    Get a List of Documents

    Information about the required documents can be retrieved by using an action based on GET HTTP request. The response will contain a list of documents provided for each Shop ID in JSON format.

    The resource exposed for GET requests at the download_link location will be the actual file in binary format.

    Definition: GET /api/shops/{shop_id}/documents

    Where:
    • {shop_id} – The ID of the shop, a unique number that identifies the shop in the GlobalPay system.

    Request Model:

    GET /api/shops/{shop_id}/documents
    Authorization: Basic Pre-shared-APIKEY

    Response Model:

    {
        "shop_documents": [
            {
                "id": Int (Document id),
                "shop_id": Int,
                "date_uploaded": "Date (yyyy-mm-dd hh:mm:ss, eg. 2018-12-31 23:59:59)",
                "file_name": "String (Original file name if available)",
                "file_type": "doc" | "docx" | "pdf" | "jpg" | "jpeg" | "gif" | "png" | "bmp" | "tiff" | "tif",
                "file_size": Int (size in bytes expected to be downloaded),
                "type": "company_certificate" | "register_of_directors" | "bank_statement" | "passport" | "bill" | "other",
                "contact_email": "Email of contact for which this document was uploaded - applies ONLY for passport or bill (should match contact email)",
                "download_link": "Link to download the file (if available), if file is not exposed through web server, provide entry point where we can download the file"
            },
            ...
        ],
        "total_count": Int
    }
    
    

    The following documents are required by Nuvei KYC platform:

    1. Bank statement (Not older than 6 months, with account holder and IBAN code visible);
    2. Company certificate / Incorporation certificate (Not older than 6 months);
    3. Register of directors (or any other document showing the company’s legal representatives) (Not older than 6 months);
    4. Passport copy of company’s legal representatives: (Legible ID copy in color within validity period);
    5. Utility bill that can be used as proof of address for company’s legal representatives (Not older than 6 months).

    Get a List of Shops

    In order to import a list of newly created shops you will need to expose an API which Nuvei can call using an action based on GET HTTP request. The response will contain a shop list in JSON format that returns all the shops that were created or updated after last_updated_date.

    Only a limited amount of details for each shop will be provided.

    Definition: GET /api/shops?last_updated_date={last_updated_date}

    Where:
    • {last_updated_date} – format: {Year(4)}-{month(2)}-{day(2)}T{Hour(2)}:{Minute(2)}:{Second(2)}Z)
      eg. 2021-01-01T20:11:01Z

    Request Model:

    GET /api/shops?last_updated_date=2021-01-01T20:11:01Z
    Authorization: Basic Pre-shared-APIKEY 
    Where:
    • Pre-shared-APIKEY – consists of the user name and password previously requested in the Shop Integration step

    Response Model:

    {
    "shops": [
      {
        "shop_id": Int,
        "shop_name": String,
        "shop_state": "OPEN" | "CLOSED" | "SUSPENDED",
        "company_legal_name" : String,
        "company_number": String,
        "vat": String,
        "country": "String (ISO 3166-1 alpha-2-chars)",
        "company_type": String ("S.A.S." | "S.S." | "S.N.C." | "S.P.A." | "S.A.P.A" | "S.R.L" | "LLC" | "LLP" | "Corporation" | "Non-Profit" | "Parnership" | "Other")
        "company_type_text": String (In case company_type="Other")
        "business_sector": String ("Advisory services" | "Digital games" | "Education" | "Entertainment" | "Finance" | "Forex" | "Gambling" | "Mass media" | "Money transfer" | "Retail - fashion" | "Retail - other" | "Social networks" | "Software" | "Telecommunication" | "Transportation" | "Travel")
        "business_model": "String (information about products or services)",
        "main_activity": "String (what is merchant selling - will appear in agreement)",
        "date_of_establishment": "Date (yyyy-mm-dd hh:mm:ss, eg. 2018-12-31 23:59:59)",
        "company_website": String,
        "mcc": Int (https://en.wikipedia.org/wiki/Merchant_category_code),
        "ecommerce_sites": [ "http://www.site1.com", "http://www.site2.com", "http://www.site3.com" ] (max 3),
        "top_3_markets": [ "String (ISO 3166-1 alpha-2)", "String (ISO 3166-1 alpha-2)", "String (ISO 3166-1 alpha-2)" ] (max 3),
        "annual_volume": Int (in EUR),
        "atv": Int (Average transaction value in EUR),
        "headquarters_address": {
            "street": String,
            "zip_code": String,
            "city": String,
            "state": String,
            "phone": String,
            "fax": String,
            "country": "String (ISO 3166-1 alpha-2-chars)"
        },
        "banking_details": {
            "bank_name": String,
            "account_holder": String,
            "account_currency": "String (ISO 3 chars currency)",
            "iban": String,
            "account_number": String,
            "swift": String
        },
        "contact_informations": { (MANDATORY)
            "title": String ("Mr."|"Ms."|"Mrs."),        
            "firstname": String,
            "lastname": String,
            "email": "String MANDATORY",
            "country": "String (ISO 3166-1 alpha-2-chars)"
        },
        "ubos": [
            {
                "percentage": Int,
                "title": String ("Mr."|"Ms."|"Mrs."),
                "firstname": String,
                "lastname": String,
                "street": String,
                "zip_code": String
                "city": String,
                "state": String,
                "country": "String (ISO 3166-1 alpha-2-chars)",
            },
            ...
        ],
       "representatives": [
            {
                "signing_right": Boolean,
                "title": String ("Mr."|"Ms."|"Mrs."),
                "firstname": String,
                "lastname": String,
                "email": "String MANDATORY",
                "date_of_birth": "Date (yyyy-mm-dd hh:mm:ss, eg. 2001-12-31 23:59:59)",
                "street": String,
                "zip_code": String
                "city": String,
                "state": String,
                "country": "String (ISO 3166-1 alpha-2-chars)",
            },
            ...
        ],
        "date_created": "Date (yyyy-mm-dd hh:mm:ss, eg. 2021-01-20 23:59:59)",
        "last_updated_date": "Date (yyyy-mm-dd hh:mm:ss, eg. 2021-01-20 23:59:59)",
        "logo": String,
        "commision_trx_percentage": Float,
        "commision_trx_fixed_amount": Float,
        "commision_trx_currency": "String (ISO 3 chars currency)",
        }
    ],
    "total_count": Int (number of shops in the list)
    }
    

    Not all fields are mandatory in the above request! If the Marketplace does not provide all the necessary data, the shop representative will fill the missing fields in Nuvei platform. Once Nuvei identifies a newly created shop, it creates an account in Nuvei KYC platform for the shop representative and sends an email asking to finalize the application (e.g. fill missing info, upload documents, sign the online contract).

    Marketplace API

    Marketplace API is the seamless solution that provides access to credit card payments and alternative payment methods for a Marketplace in a simple yet reliable legal and technical setup. Its aim is to provide a robust technical solution which will ensure that all of the participating shops as well as the marketplace will benefit of a seamlessly onboarding process, reliable and secure transaction processing, reconciliation to the penny and prompt settlements.

    1 Marketplace - Processes and Systems

    The technical process (KYC Flow) with all the necessary steps is described next:

    • The Marketplace accepts a new shop on its platform and creates an entry in the database.
    • The Marketplace exposes an API which Nuvei KYC platform calls several times per day to pull information about the newly created shops.
    • Nuvei KYC platform pulls all available information about the shop (ShopID, Alias, shop representative e-mail, documents etc.). If all the required information is not available, the merchant representative will have to fill it in on Nuvei KYC platform.
    • Nuvei will create an account for the shop in the Nuvei KYC platform and send an e-mail to the shop representative with the login details.
    • The shop representative will fill in any missing company related data and upload KYC/UBO specific documentation.
    • The shop representative signs online the Merchant agreement for Payment processing.
    • Nuvei Risk team reviews the company.
    • In case of approval, a siteID is generated in the Nuvei platform.
    • Nuvei will do a push notification to a page designated by The Marketplace with the following info ShopID, SiteID, APIKEY. The last two parameters need to be used when calling Nuvei REST API when processing the payments. The Marketplace needs to respond with HTTP return code 204 (No content) to the POST notification.

    Mobile SDK – Cards

    Besides Alipay and WeChat, our Mobile SDK can be used for in-app purchases using Credit Cards. The advantage of using our SDK is that the credit card details never reach your server, simplifying to a minimum the PCI requirements you must meet.

    The interaction flow is described next:

    1. Upon order initiation form the customer
    2. Your server asks our server for a temporary API Key at entry point api/authorization/apikey:

      Request Model:

      POST https://securetest.smart2pay.com/v1/authorization/apikey
      Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    3. Our server responds with a temporary API Key:

      Response:

      HTTP/1.1 201 Created
      Content-Type: application/json; charset=utf-8
      
      {
        "ApiKey": {
          "Value": "MzAwMDc6M2FkODVhYzctNjhlNS00MTA2LTliNjctNTg3MmM1ZmI2ZDNiLTYzMzA=",
          "Created": "20181206141407",
          "LifeTime": 30,
          "AccessCounterLimit": 10,
          "Status": {
            "ID": 2,
            "Info": "Success",
            "Reasons": []
          }
        }
      }

    4. The temporary API Key must be passed to the app.
    5. From the app you collect the credit cards details from which you build a CardAuthenticationRequest object, together with the temporary API key obtained in the previous step. Set callback functions to handle Success and Failure cases.
      CardAuthenticationRequest cardAuthenticationRequest = new CardAuthenticationRequest("Basic " + apiKey, true);
      
      HashMap card = new HashMap();
      card.put("HolderName", ((EditText)findViewById(R.id.e_cardholder_name)).getText().toString());
      card.put("Number", ((EditText)findViewById(R.id.e_cc_number)).getText().toString());
      card.put("ExpirationMonth", ((EditText)findViewById(R.id.e_exp_month)).getText().toString());
      card.put("ExpirationYear", ((EditText)findViewById(R.id.e_exp_year)).getText().toString());
      card.put("SecurityCode", ((EditText)findViewById(R.id.e_cvv)).getText().toString());
      
      cardAuthenticationRequest.setRequestBody(CCAuthenticateRequestBodyBuilder.getBody(card));
      cardAuthenticationRequest.setCallback((new CardAuthenticationRequest.Callback() {
          public void onSuccess(@NonNull final String creditCardToken) {
              // Authorization was successful!
              // Send it to your server and initiate a transactions via REST API: https://docs-apm.nuvei.com/category/direct-card-processing/one-click-payment/
              Log.d("TokenForCreditCard", creditCardToken);
              runOnUiThread(new Runnable() {
                  @Override
                  public void run() {
                      displayDebugInfo("Credit Card Token:" + creditCardToken);
                  }
              });
          }
      
          public void onFailure() {
              Log.w(TAG,"Card Authentication request failed.");
              runOnUiThread(new Runnable() {
                  @Override
                  public void run() {
                      displayDebugInfo("Card Authentication request failed.");
                  }
              });
          }
      }));
      cardAuthenticationRequest.enqueue();
      
    6. Our SDK calls our server with these details.
    7. The server responds with a token to our SDK.
    8. Our SDK passed the token back to your APP via the callback function setup in step 5.
    9. The order can now be submitted from the app to your server together with the token
    10. A credit card transaction using token is now initiated from your server. For more details go to: Recurring Card Payments section. You can store the token on your server for subsequent purchases.
    11. Our server responds to your server with the Authorization result. Upon a successful result you can release the goods or services.
    12. You pass the payment result to the app.

    Roles Administration

    The first user created for a merchant (the one created from the registration form) has a default role assigned. This role (Administrator) has all the access rights existent in the GlobalPay system.

    69

    Please note that access to this Roles Administration section is only available in production environment!

    Click on Add a New Role button and you can create a new role. In the new form that opens, in the General section, you need to provide a role name and a description to the role.

    69

    In the Access Rights section you can assign access rights for the new role. When finished, click Save and your role will be created. The role you have just created is visible in the grid. You can create as many roles as you like.

    70

    If you want to remove or add new access rights to a role, or simply modify the name or the description you can click on the Edit button from the grid. And, of course, you can delete the roles you don’t need anymore using the Delete button from the grid.

    Users Administration

    When entering this section you will see in the grid your user and all the users you have created. These are all the users associated with your Merchant ID.

    72

    Please note that access to this Users Administration section is only available in production environment!

    Click on Add a New User button and you can create a new user. In the new form that opens, in the General section, you need to provide a User Name and a User Email.

    In the Roles section you can assign specific roles for the new user. You can assign to the new user one or more of the roles you have previously created.

    In the Sites section you can assign specific websites to the new user. When finished, click Save and your new user will be created. Click Save and the new user will be saved and he will receive an email with the password. The User you have just created is visible in the grid. You can create as many users as you like.

    Please note that a new user can also be created via API by submitting a POST HTTP request.

    If you want to change user name or user email, remove or add roles or update the websites assign to an already created user, you need to click on the Edit button in the grid.

    And, of course, you can delete the user accounts that do not serve you anymore using the Delete button from the grid.

    74

    In the Edit section you can also generate a new password for that specific user. When clicking Generate new password an email will be sent to that user with the new password.

    Please be aware that if you assign a user a certain role (that contains specific access rights), that user will only have access to that restricted area defined by that role (and implicitly by the access rights).

    Example:

    You provide User1 with Role1 that includes NotificationURL-Update access right and Signature-Update access right. This means that User1 will only see two tabs when entering the dashboard: Account and Configuration. And he will have the right to generate a new signature and modify the Notification URL.

    An update access right implicitly contains the view access right.

    Example:

    If the user has only one role that only contains the access right Signature-Update, that user will be able to see the Signature section and update the signature.

    If the user has only one role that contains only Signature-view, that user will be able to access the Signature section, but won’t be able to update the signature.

    Payment Methods

    Here you will find a complete list of all the payment methods, you can easily verify the list of payment methods assigned to your merchant account or to request and activate new payment methods of your choice.

    When you access the Payment Methods tab you will see a complete list of all the payment methods available for your merchant account. You have the possibility to search for specific payment methods using different search filters and to see the description for each payment method.

    You can search for a specific payment method using the search filters available: payment method’s status, name, description, guaranteed status and countries available.

    A very important step during the configuration process is setting up your payment methods. In this section you will be able to configure the preferred way to receive your payments and setup your desired payment methods. The payment methods are selected for an account when the account is created, but they can also be changed at any time needed.

    There are a few possible actions available, in order for you to have a better management over your merchant account, that are explained below:

    • Request a new payment method:

      Using the first search filter from the top of the page, choose Can Request option from the dropdown list. A list of all the available payment methods that you can request for your account will appear.

      Once you find the desired payment method, click the “+” Request sign in front of it to add it to your account,

      A confirmation message will be displayed.

      After you have requested the payment method, you need to wait for Smart2pay approval of the payment method. Also, you can check the list of all your requested payment methods by using the first search filter from the top of the page. Choose Approval in Progress option from the dropdown list and a list of all your requested payment methods for your account will appear.

    • Activate a payment method:

      Using the first search filter from the top of the page, choose Can Activate option from the dropdown list. A list of all the payment methods assigned to your account that you can activate will appear.

      Once you find the desired payment method, click the Activate option in front of it to activate it.

      A confirmation message will be displayed.

      You need to wait for Smart2pay approval for the activation of the payment method. Also, you can check the list of all your payment methods that are waiting activation by using the first search filter from the top of the page. Choose Activation in Progress option from the dropdown list and a list of all your payment methods waiting activation will appear.

    • Deactivate a payment method:

      Using the first search filter from the top of the page, choose My Methods option from the dropdown list. A list of all the payment methods activated for your account will appear.

      If you want to deactivate a specific payment method, click the Deactivate option in front of it.

      A confirmation message will be displayed.

    • Ask for availability of a payment method:

      For some payment methods you need to ask our support team for more details regarding its availability. You can check the list of all the payment methods that need further guidance from our support team by using the first search filter from the top of the page. Choose Ask Availability option from the dropdown list and a list of all the payment methods that need further guidance from our support team will appear.

    • Unavailable payment methods:

      Some payment methods may be currently unavailable due to different external factors. You can check the list of all the unavailable payment methods by using the first search filter from the top of the page. Choose Unavailable option from the dropdown list and a list of all the unavailable payment methods will appear.

    • Rejected payment methods:

      If the request of a payment method will have a negative outcome we will let you know. You can check the list of all the rejected payment methods by using the first search filter from the top of the page. Choose Rejected option from the dropdown list and a list of all the rejected payment methods will appear.

    iDEAL Implementation guide

    iDEAL, one of the most used online banking method in the Netherlands, allows the customer to buy securely on the Internet, directly from his bank account opened at one of the major Dutch banks: ABN AMRO, SNS Bank, RegioBank, Rabobank, Knab, Moneyou, ASN Bank, Triodos Bank, ING, Rabobank, Van Lanschot Bankiers,Knab, Bunq, Moneyou and Handelsbanken.

    iDEAL was developed by the Dutch banking community in order to facilitate easier payment for online products and services. iDEAL enables direct and secure real-time online payments between bank accounts of Consumers and iDEAL Merchants. The main characteristics of iDEAL are:

    • Real-time payment through accepted and trusted Internet banking that is already familiar to Consumers;
    • Real-time payment authorisation for the Consumer and real-time confirmation to the Merchant by the Acquiring bank, followed by the irrevocable transfer of funds to the Merchant;
    • Suitability for online delivery (e.g. downloads, mobile top-ups), offline delivery (e.g. goods) and time-critical payments (e.g. airline tickets);
    • Offers the flexibility to make payments for many different purposes (e.g. charitable donations, telephone/e-mail orders).

    Please ask technicalsupport-s2p@nuvei.com for the latest iDEAL Merchant Implementation Guide (MIG) and the necessary operation manuals.

    iDEAL Four Party Model

    When talking about iDeal transaction, one must know that there are at least four parties involved:

    • The Consumer: buys a product or service online from a Merchant that offers the iDEAL payment method
    • The Merchant: sells products or services online to Consumers
    • The Issuer (the Consumers’ bank): the Consumer executes iDEAL payments in his Internet banking environment – through his Issuer
    • The Acquirer (the Merchant’s bank): the Merchant accepts iDEAL payments – through his Acquirer

    Additional parties can be involved in an iDEAL transaction:

    • The Merchant can, for example, use a Payment Service Provider (PSP) to establish the connection with its Acquiring bank. When this PSP receives/collects the payments before they are paid to the Merchant, this is called a “Collecting PSP” (CPSP). In this case the Collecting PSP acts as the Merchant for the purpose of the iDEAL payments and holds the iDEAL contract with the Acquiring bank on behalf of one or multiple other Merchants.
    Issuer Selection List Presentation

    To ensure that the Consumer experience of an iDEAL transaction is consistent and recognizable through all Merchant websites; all Merchants have to comply with certain presentation standards:

    • All Issuers in the DirectoryResponse (to be collected at least monthly) have to be shown in a list (e.g. dropdown list or list of radio buttons) in alphabetic order and exactly as presented in the DirectoryResponse message.
    • The list should be accompanied by the instruction phrase “Kies uw bank” (UK: “Choose your bank”). In case of an HTML SELECT, the first element in the list states this instruction phrase and is selected by default (to prevent accidental Issuer selection).
    • It is not allowed to exclude or grey out any active Issuers from the Issuer list. In case of a new Issuer, the Issuer list should be updated wihtin one month (preferably earlier).
    • It is recommended to configure the HTML “value” field of the items in the list box to be the issuerID (BIC) of the corresponding Issuer, because this value is used in subsequent messages (TransactionRequest).
    • The Merchant may preselect an Issuer only to allow for an improved user experience (e.g. if the Consumer has previously initiated an iDEAL payment with a specific Issuer). The Consumer must however always be offered the possibility to alter the preselected Issuer.

    An example of a correct presentation of the Issuer selection list is shown in the figure:

    iDEAL banners and logo’s

    Merchants that want to use a banner on their website to promote iDEAL can download the most recent banners at https://www.ideal.nl/en/businesses/logos/. These banners need to be installed only once, since the URL will always refer to the latest version of the banner containing the right logos of the participating Issuing banks.

    The iDEAL logo must be used by anyone who offers iDEAL as a payment method, informing customers from the beginning that they can pay with iDEAL.

    The iDEAL logo may only be used in the provided form and colour. The use of other colours is not permitted.

    For more information and instructions for using the iDEAL logo, checkout the iDEAL logo manual.

    POLi Test Data (Australia)

    In order for you to test POLi payment method successfully, please use the below test data.

    POLi Test Data
    Data Value
    User DemoShopper
    Password DemoShopper

    POLi Payment Flow (Australia)

    1. The Customer selects his Bank from the list and proceeds with the payment.

      1 Select bank

    2. The Customer enters the login details. He must fill the form with his Username and password and click the Login button.

      1 Login details

    3. The Customer needs to select the bank account he wants to transfer money from and click the Continue button.

      1 Select bank account

    4. The customer is redirected to the provider’s confirmation page where he sees the payment summary and details. He completes the transaction by clicking on the Confirm button.

      1 Transaction confirmation

    5. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    Alipay Payment Request

    Definition: POST https://paytest.smart2pay.com/v1/payments

    Below you will find a full example of a payment request for Alipay method (with Success and Bad response). The parameters of the payment are sent in the message body as a JSON object.

    For Alipay payments only the following Articles parameters are mandatory to be sent in the request, the rest of them are optional:

    • Name – Article’s name;
    • Quantity – The number of products.

    A 201 HTTP response (Created) is returned if the payment was correctly initialized.

    For more information about status codes, please go to Basic HTTP Status Codes.

    Request: 

    POST https://paytest.smart2pay.com/v1/payments
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Payment": {
        "MerchantTransactionID": "s2ptest_h31",
        "Amount": "100",
        "Currency": "CNY",      
        "MethodID": 24,
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",      
        "TokenLifetime": 10,
        "BillingAddress": {
          "Country": "CN"
          },        
        "Articles": [
          { 
          "Name": "TEST",
          "Quantity": 1
          }
        ]
      }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Payment": {
            "ID": 4201852,
            "SkinID": null,
            "ClientIP": null,
            "Created": "20181120122556",
            "MerchantTransactionID": "s2ptest_h31",
            "OriginatorTransactionID": null,
            "Amount": "100",
            "Currency": "CNY",
            "CapturedAmount": null,
            "ReturnURL": "http://demo.smart2pay.com/redirect.php",
            "Description": null,
            "MethodID": 24,
            "MethodOptionID": null,
            "IncludeMethodIDs": null,
            "ExcludeMethodIDs": null,
            "PrioritizeMethodIDs": null,
            "SiteID": 30201,
            "NotificationDateTime": "20181120122556",
            "Customer": null,
            "BillingAddress": null,
            "ShippingAddress": null,
            "Articles": [
                {
                    "MerchantArticleID": null,
                    "Name": "TEST",
                    "Quantity": 1,
                    "Price": null,
                    "VAT": null,
                    "Discount": null,
                    "Type": null,
                    "TaxType": null,
                    "DiscountValue": null
                }
            ],
            "Details": null,
            "ReferenceDetails": null,
            "CustomParameters": null,
            "PreapprovalID": null,
            "Status": {
                "ID": 1,
                "Info": "Open",
                "Reasons": null
            },
            "MethodTransactionID": null,
            "TokenLifetime": null,
            "Capture": null,
            "PreapprovalDetails": null,
            "RedirectURL": null
        }
    }

    In case of an API error, an HTTP 4xx (you did something wrong) or HTTP 5xx (we did something wrong) response is returned.

    For more information about the reasons of a wrong request response see our section GlobalPay Return Codes.

    Request:

    POST https://paytest.smart2pay.com/v1/payments
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Payment": {
        "MerchantTransactionID": "s2ptest_h32",
        "Amount": "100",
        "Currency": "CN",      
        "MethodID": 24,
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",      
        "TokenLifetime": 10,
        "BillingAddress": {
          "Country": "CN"
          },
            
        "Articles": [
          { 
          "Name": "TEST",
          "Quantity": 1
          }
        ]
      }
    }
    

    Response:

    HTTP/1.1 400 Bad Request
    Content-Type: application/json; charset=utf-8
    
    {
        "Payment": {
            "ID": null,
            "SkinID": null,
            "ClientIP": null,
            "Created": null,
            "MerchantTransactionID": "s2ptest_h32",
            "OriginatorTransactionID": null,
            "Amount": "100",
            "Currency": "CN",
            "CapturedAmount": null,
            "ReturnURL": "http://demo.smart2pay.com/redirect.php",
            "Description": null,
            "MethodID": 24,
            "MethodOptionID": null,
            "IncludeMethodIDs": null,
            "ExcludeMethodIDs": null,
            "PrioritizeMethodIDs": null,
            "SiteID": null,
            "NotificationDateTime": null,
            "Customer": null,
            "BillingAddress": null,
            "ShippingAddress": null,
            "Articles": null,
            "Details": null,
            "ReferenceDetails": null,
            "CustomParameters": null,
            "PreapprovalID": null,
            "Status": {
                "ID": null,
                "Info": null,
                "Reasons": [
                    {
                        "Code": "2",
                        "Info": "Validation failed - Currency (RegEx: ^[A-Z]{3}$)"
                    }
                ]
            },
            "MethodTransactionID": null,
            "TokenLifetime": null,
            "Capture": null,
            "PreapprovalDetails": null,
            "RedirectURL": null
        }
    }

    API Idempotence

    Idemptotence is the property of certain operations in mathematics and computer science whereby they can be applied multiple times without changing the result beyond the initial application.

    When talking about API calls, idempotency means that if you attempt an operation twice or more, only the first attempt will be processed. Idempotence prevents the processing of duplicate requests by using unique keys.

    If a network connection error or a timeout error appears when creating a card payment, you can do a retry. But still, in this case, there is the possibility that the card payment has already been created, leading you only to generate a duplicate payment when you do the retry.

    In order to avoid this undesired scenario, we have implemented a new piece of functionality using Unique Keys, which make it safe to retry non-idempotent API requests. These Unique Keys or Idempotence keys ensure that no matter the number of retries for a specific call only one response action is executed, and the payment is not duplicated.

    Our API supports idempotence for safely retrying requests and guarantees that the operation is performed only once. Therefore, if you create a card payment that fails due to a network connection error, you can retry the request with the same idempotence key to guarantee that only a single card payment is created.

    Idempotence keys are unique value generated keys, for example, UUIDs, that you submit as a request header and guarantee that only one resource will be created regardless of how many times a request is sent to the server.

    Idempotence keys can be generated using your own preferred method or any appropriately random string. Still, we recommend to generate your own Unique Keys (Idempotence keys) using V4 UUIDs.

    For card payments we’ll always send back the same response for requests made with the same key, and keys can’t be reused with different request parameters. The keys are stored for a period of 24 hours.

    You can also visit our Nuvei SDK .NET section for more information on how you can generate and plug in your Unique Key Generator.

    Alipay Test Data

    In order for you to test Alipay payment method successfully, please use the below test data.

    Alipay Test Data
    Data Value
    Email address: cnbuyer_3467@alitest.com
    Login password: a111111
    Payment password: b111111
    Alipay New Test Data
    Data Value
    Email address: forex_1699541344189@alitest.com
    Login password: 111111
    Payment password: 111111

    Alipay Payment Flow

    1. The Customer selects his preferred currency from the list and continues the payment by clicking on the Continue button.1 Select currency
    2. Once the customer arrives at the provider’s page he has two choices: to continue with the payment using the mobile version or using the desktop version.1 Payment version
    3. The customer logs in to his Alipay account by entering his email address and login password.1 Account login
    4. The customer confirms the payment by entering the payment password.1 Payment password
    5. The payment is processing.1 Payment processing
    6. In a few seconds the customer will be redirected back to your ReturnURL.1 Return page when the redirection status is a success

    WeChat Test Data

    For WeChat payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    WeChat Payment Flow

    1. The customer selects his preferred currency from the list and enters his email address.

      1 Enter email

    2. You can skip this step by sending in the initial POST the following parameters: SkipHPP=1 and CustomerEmail.

    3. The Customer is redirected to WeChat payment page.

      1 WeChat payment page

    4. The Customer opens WeChat application and scans the QR code.

      1 QR code scanning

    5. The payment details are displayed and the customer confirms by using the payment password.

      1 Payment confirmation

    6. The payment is confirmed.

      1 Payment successful

    7. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is Processing

    Multibanco SIBS Payment Request

    Definition: POST https://paytest.smart2pay.com/v1/payments

    Below you will find a full example of a payment request for Multibanco SIBS method (with Success and Bad response). The parameters of the payment are sent in the message body as a JSON object.

    In order to display the payment details to your customers on your own page, you can send in the request the CustomerName and Country parameters. Use the information received in Response in the ReferenceDetails object.

    A 201 HTTP response (Created) is returned if the payment was correctly initialized.

    For more information about status codes, please go to Basic HTTP Status Codes.

    Request: 

    POST https://paytest.smart2pay.com/v1/payments
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
       "Payment": {
          "MerchantTransactionID": "s2ptest_h40",
          "Amount": "400",
          "Currency": "EUR",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "Description": "SIBSTestDetails",
          "MethodID": 20,
          "BillingAddress": {
             "Country": "PT"
          },
          "Customer": {
             "FirstName": "John",
             "LastName": "Doe"
          }
       }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Payment": {
            "ID": 4178449,
            "SkinID": null,
            "ClientIP": null,
            "Created": "20181107100206",
            "MerchantTransactionID": "s2ptest_h40",
            "OriginatorTransactionID": null,
            "Amount": "400",
            "Currency": "EUR",
            "CapturedAmount": null,
            "ReturnURL": "http://demo.smart2pay.com/redirect.php",
            "Description": "SIBSTestDetails",
            "MethodID": 20,
            "MethodOptionID": null,
            "IncludeMethodIDs": null,
            "ExcludeMethodIDs": null,
            "PrioritizeMethodIDs": null,
            "SiteID": 30201,
            "NotificationDateTime": null,
            "Customer": {
                "ID": 142823,
                "MerchantCustomerID": null,
                "Email": null,
                "FirstName": "John",
                "LastName": "Doe",
                "Gender": null,
                "SocialSecurityNumber": null,
                "SocialSecurityNumber2": null,
                "Phone": null,
                "Company": null,
                "DateOfBirth": null
            },
            "BillingAddress": {
                "ID": 705,
                "City": null,
                "ZipCode": null,
                "State": null,
                "Street": null,
                "StreetNumber": null,
                "HouseNumber": null,
                "HouseExtension": null,
                "Country": "PT"
            },
            "ShippingAddress": null,
            "Articles": null,
            "Details": null,
            "ReferenceDetails": {
                "BankCode": null,
                "BankName": null,
                "EntityID": null,
                "EntityNumber": "11302",
                "ReferenceID": null,
                "ReferenceNumber": "022 518 828",
                "SwiftBIC": null,
                "AccountCurrency": null,
                "AccountNumber": null,
                "AccountHolder": null,
                "IBAN": null,
                "AmountToPay": "4 EUR",
                "QRCodeURL": null,
                "Instructions": null
            },
            "CustomParameters": null,
            "PreapprovalID": null,
            "Status": {
                "ID": 1,
                "Info": "Open",
                "Reasons": null
            },
            "MethodTransactionID": null,
            "TokenLifetime": 1,
            "Capture": null,
            "PreapprovalDetails": null,
            "RedirectURL": "https://apitest.smart2pay.com/Home?PaymentToken=DAB863DD12A9DB642BF15252CB89CAC2.4178449"
        }
    }

    Bank Transfer Payment Request

    Definition: POST https://paytest.smart2pay.com/v1/payments

    Below you will find a full example of a payment request for Bank Transfer method (with Success and Bad response). The parameters of the payment are sent in the message body as a JSON object.

    In order to display the bank transfer details to your customers on your own page, you can send in the request the CustomerName and Country parameters. Use the information received in Response in the ReferenceDetails object.

    A 201 HTTP response (Created) is returned if the payment was correctly initialized.

    For more information about status codes, please go to Basic HTTP Status Codes.

    Request: 

    POST https://paytest.smart2pay.com/v1/payments
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Payment":{
        "MerchantTransactionID": "s2ptest_h35",
        "Amount": 400,
        "Currency": "PLN",
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "BankTransferTestdetails",
        "MethodID": "1",
        "BillingAddress": {
          "Country": "DE"
        },
        "Customer": {
          "FirstName": "John",
          "LastName": "Doe"
        }
      }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Payment": {
            "ID": 4178425,
            "SkinID": null,
            "ClientIP": null,
            "Created": "20181107093433",
            "MerchantTransactionID": "s2ptest_h35",
            "OriginatorTransactionID": null,
            "Amount": "400",
            "Currency": "PLN",
            "CapturedAmount": null,
            "ReturnURL": "http://demo.smart2pay.com/redirect.php",
            "Description": "BankTransferTestdetails",
            "MethodID": 1,
            "MethodOptionID": null,
            "IncludeMethodIDs": null,
            "ExcludeMethodIDs": null,
            "PrioritizeMethodIDs": null,
            "SiteID": 30201,
            "NotificationDateTime": null,
            "Customer": {
                "ID": 142823,
                "MerchantCustomerID": null,
                "Email": null,
                "FirstName": "John",
                "LastName": "Doe",
                "Gender": null,
                "SocialSecurityNumber": null,
                "SocialSecurityNumber2": null,
                "Phone": null,
                "Company": null,
                "DateOfBirth": null
            },
            "BillingAddress": {
                "ID": 420,
                "City": null,
                "ZipCode": null,
                "State": null,
                "Street": null,
                "StreetNumber": null,
                "HouseNumber": null,
                "HouseExtension": null,
                "Country": "DE"
            },
            "ShippingAddress": null,
            "Articles": null,
            "Details": null,
            "ReferenceDetails": {
                "BankCode": null,
                "BankName": "ING Bank",
                "EntityID": null,
                "EntityNumber": null,
                "ReferenceID": null,
                "ReferenceNumber": "HPP4178425",
                "SwiftBIC": "INGBDEFF",
                "AccountCurrency": "EUR",
                "AccountNumber": "0010126423",
                "AccountHolder": "Stichting Smart2Pay Escrow Services",
                "IBAN": "DE72 5002 1000 0010 1264 23",
                "AmountToPay": "0.93 EUR",
                "QRCodeURL": null,
                "Instructions": null
            },
            "CustomParameters": null,
            "PreapprovalID": null,
            "Status": {
                "ID": 1,
                "Info": "Open",
                "Reasons": null
            },
            "MethodTransactionID": null,
            "TokenLifetime": 1,
            "Capture": null,
            "PreapprovalDetails": null,
            "RedirectURL": "https://apitest.smart2pay.com/Home?PaymentToken=F152AF870FFF05B98A83F7B8C35A81D9.4178425"
        }
    }

    There is another possibility to initiate a Bank Transfer transaction where you can send your own Reference Number in the request. Checkout the below example with the ReferenceNumber parameter sent in the request together with Customer parameters:

    Request:

    POST https://paytest.smart2pay.com/v1/payments
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Payment": {
        "MerchantTransactionID": "s2ptest_h39",
        "Amount": 400,
        "Currency": "PLN",
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "BankTransferTestdetails",
        "MethodID": "1",
        "BillingAddress": {
          "Country": "DE"
        },
        "Customer": {
          "FirstName": "John",
          "LastName": "Doe"
        },
        "Details": {
          "ReferenceNumber": "your_reference_number"
        }
      }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Payment": {
            "ID": 4178441,
            "SkinID": null,
            "ClientIP": null,
            "Created": "20181107095318",
            "MerchantTransactionID": "s2ptest_h39",
            "OriginatorTransactionID": null,
            "Amount": "400",
            "Currency": "PLN",
            "CapturedAmount": null,
            "ReturnURL": "http://demo.smart2pay.com/redirect.php",
            "Description": "BankTransferTestdetails",
            "MethodID": 1,
            "MethodOptionID": null,
            "IncludeMethodIDs": null,
            "ExcludeMethodIDs": null,
            "PrioritizeMethodIDs": null,
            "SiteID": 30201,
            "NotificationDateTime": null,
            "Customer": {
                "ID": 142823,
                "MerchantCustomerID": null,
                "Email": null,
                "FirstName": "John",
                "LastName": "Doe",
                "Gender": null,
                "SocialSecurityNumber": null,
                "SocialSecurityNumber2": null,
                "Phone": null,
                "Company": null,
                "DateOfBirth": null
            },
            "BillingAddress": {
                "ID": 420,
                "City": null,
                "ZipCode": null,
                "State": null,
                "Street": null,
                "StreetNumber": null,
                "HouseNumber": null,
                "HouseExtension": null,
                "Country": "DE"
            },
            "ShippingAddress": null,
            "Articles": null,
            "Details": {
                "AccountNumber": null,
                "AccountHolder": null,
                "IBAN": null,
                "BIC": null,
                "PrepaidCard": null,
                "PrepaidCardPIN": null,
                "SerialNumbers": null,
                "Wallet": null,
                "ReferenceNumber": null,
                "PayerCountry": null,
                "PayerEmail": null,
                "PayerPhone": null,
                "BankCode": null,
                "BankName": null,
                "BankSortCode": null,
                "SocialSecurityNumber": null,
                "BillingCycleStart": null,
                "BillingCycleEnd": null,
                "UnsubscribeInstructions": null,
                "CustomerLoginID": null,
                "PaidAmount": null,
                "PaidCurrency": null,
                "ProviderExchangeRate": 0,
                "PayerBankAccountID": null
            },
            "ReferenceDetails": {
                "BankCode": null,
                "BankName": "ING Bank",
                "EntityID": null,
                "EntityNumber": null,
                "ReferenceID": null,
                "ReferenceNumber": "your_reference_number",
                "SwiftBIC": "INGBDEFF",
                "AccountCurrency": "EUR",
                "AccountNumber": "0010126423",
                "AccountHolder": "Stichting Smart2Pay Escrow Services",
                "IBAN": "DE72 5002 1000 0010 1264 23",
                "AmountToPay": "0.93 EUR",
                "QRCodeURL": null,
                "Instructions": null
            },
            "CustomParameters": null,
            "PreapprovalID": null,
            "Status": {
                "ID": 1,
                "Info": "Open",
                "Reasons": null
            },
            "MethodTransactionID": null,
            "TokenLifetime": 1,
            "Capture": null,
            "PreapprovalDetails": null,
            "RedirectURL": "https://apitest.smart2pay.com/Home?PaymentToken=DDC981EDC0426B8C22F57F88FD8B0FF4.4178441"
        }
    }

    In case of an API error, an HTTP 4xx (you did something wrong) or HTTP 5xx (we did something wrong) response is returned.

    For more information about the reasons of a wrong request response see our section GlobalPay Return Codes.

    Request:

    POST https://paytest.smart2pay.com/v1/payments
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Payment": {
        "MerchantTransactionID": "s2ptest_h36",
        "Amount": 400,
        "Currency": "PLN",
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "BankTransferTestdetails",
        "MethodID": "1",
        "BillingAddress": {
          "Country": "Germany"
        },
        "Customer": {
          "FirstName": "John",
          "LastName": "Doe"
        }
      }
    }

    Response:

    HTTP/1.1 400 Bad Request
    Content-Type: application/json; charset=utf-8
    
    {
        "Payment": {
            "ID": 4178427,
            "SkinID": null,
            "ClientIP": null,
            "Created": "20181107094050",
            "MerchantTransactionID": "s2ptest_h36",
            "OriginatorTransactionID": null,
            "Amount": "400",
            "Currency": "PLN",
            "CapturedAmount": null,
            "ReturnURL": "http://demo.smart2pay.com/redirect.php",
            "Description": "BankTransferTestdetails",
            "MethodID": 1,
            "MethodOptionID": null,
            "IncludeMethodIDs": null,
            "ExcludeMethodIDs": null,
            "PrioritizeMethodIDs": null,
            "SiteID": 30201,
            "NotificationDateTime": "20181107094050",
            "Customer": null,
            "BillingAddress": null,
            "ShippingAddress": null,
            "Articles": null,
            "Details": null,
            "ReferenceDetails": null,
            "CustomParameters": null,
            "PreapprovalID": null,
            "Status": {
                "ID": 4,
                "Info": "Failed",
                "Reasons": [
                    {
                        "Code": "147",
                        "Info": "Address details are invalid (BillingAddress)Country - RegEx: ^[a-zA-Z]{2}$;"
                    }
                ]
            },
            "MethodTransactionID": null,
            "TokenLifetime": null,
            "Capture": null,
            "PreapprovalDetails": null,
            "RedirectURL": null
        }
    }

    SEPA Direct Debit Recurring Payment Notification

    You need to respond with HTTP code 204 (No Content)!

    Payment notification for status Success (2):

    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Payment": {
        "ID": 4167022,
        "SkinID": null,
        "ClientIP": null,
        "Created": "20181101145458",
        "MerchantTransactionID": "s2ptest_h13",
        "OriginatorTransactionID": null,
        "Amount": "100",
        "Currency": "EUR",
        "ReturnURL": "",
        "Description": null,
        "MethodID": 84,
        "MethodOptionID": null,
        "IncludeMethodIDs": null,
        "ExcludeMethodIDs": null,
        "PrioritizeMethodIDs": null,
        "SiteID": 30201,
        "NotificationDateTime": null,
        "Customer": null,
        "BillingAddress": null,
        "ShippingAddress": null,
        "Articles": null,
        "Details": null,
        "ReferenceDetails": null,
        "CustomParameters": null,
        "PreapprovalID": 13199,
        "Status": {
          "ID": 2,
          "Info": "Success",
          "Reasons": null
        },
        "MethodTransactionID": null,
        "TokenLifetime": null,
        "Capture": null,
        "PreapprovalDetails": null,
        "RedirectURL": null
      }
    }

    Response:

    204 No Content

    The message contains a Payment object with an updated Status, which can have the following meanings:

    RECURRING PAYMENT STATUS
    ID Info Description
    2 Success The transaction is successfully settled by the bank.
    4 Failed The transaction has failed.
    16 Reversed The customer did not recognize the payment and requested the funds back from his bank.
    • In case of a Failed or Reversed status, you will be given in the notification message the reasons why the payment got to that status. Additional information will be sent in the Reasons Code and Reasons Info fields. For a complete list of possible return codes please see our section GlobalPay Return Codes.

    SEPA Direct Debit Return Codes
    Return Code Description
    221 R-Transaction : AC01 – Account Identifier incorrect (i.e. invalid IBAN of the Debtor).
    222 R-Transaction : AC04 – Account closed.
    223 R-Transaction : AC06 – Account blocked.
    224 R-Transaction : AC13 – Debtor account is a consumer account.
    225 R-Transaction : AC13 – Debtor account is a consumer account.
    226 R-Transaction : AG02 – Operation code/transaction code/sequence type incorrect, invalid file format.
    227 R-Transaction : AM04 – Insufficient funds.
    228 R-Transaction : AM05 – Duplicate collection.
    229 R-Transaction : BE05 – Identifier of the Creditor Incorrect.
    230 R-Transaction : CNOR – Creditor Bank is not registered under this BIC in the CSM.
    231 R-Transaction : DNOR – Debtor Bank is not registered under this BIC in the CSM.
    232 R-Transaction : FF01 – File Format incomplete or invalid.
    233 R-Transaction : MD01 – No mandate.
    234 R-Transaction : MD02 – Mandate data missing or incorrect.
    235 R-Transaction : MD06 – Disputed authorized transaction.
    236 R-Transaction : MD07 – Debtor Deceased.
    237 R-Transaction : MS02 – Refusal by the Debtor.
    238 R-Transaction : MS03 – Reason not specified.
    239 R-Transaction : RC01 – Bank Identifier (BIC) Incorrect.
    240 R-Transaction : RR01 – Regulatory Reason.
    241 R-Transaction : RR02 – Regulatory Reason.
    242 R-Transaction : RR03 – Regulatory Reason.
    243 R-Transaction : RR04 – Regulatory Reason.
    244 R-Transaction : SL01 – Specific Service offered by the Debtor Bank.

    Payment notification for status Failed with reason code and description.

    Payment notification for status Failed (4):

    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Payment": {
        "ID": 4157363,
        "SkinID": null,
        "ClientIP": null,
        "Created": "20181029134811",
        "MerchantTransactionID": "testCORE00001",
        "OriginatorTransactionID": null,
        "Amount": "100",
        "Currency": "EUR",
        "CapturedAmount": null,
        "ReturnURL": "",
        "Description": "test Smart2Pay",
        "MethodID": 84,
        "MethodOptionID": null,
        "IncludeMethodIDs": null,
        "ExcludeMethodIDs": null,
        "PrioritizeMethodIDs": null,
        "SiteID": 30151,
        "NotificationDateTime": null,
        "Customer": null,
        "BillingAddress": {
          "ID": 1720,
          "City": null,
          "ZipCode": null,
          "State": null,
          "Street": null,
          "StreetNumber": null,
          "HouseNumber": null,
          "HouseExtension": null,
          "Country": "NL"
        },
        "ShippingAddress": null,
        "Articles": null,
        "Details": null,
        "ReferenceDetails": null,
        "CustomParameters": null,
        "PreapprovalID": 13165,
        "Status": {
          "ID": 4,	
          "Info": "Failed",
          "Reasons": [
            {	
              "Code": "227",
              "Info": "R-Transaction : AM04 - Insufficient funds"
            }	
          ]	
        },	
        "MethodTransactionID": null,
        "TokenLifetime": null,
        "Capture": null,
        "PreapprovalDetails": null,
        "RedirectURL": null
      }
    }

    Response:

    204 No Content

    Payment notification for status Reversed with reason code and description.

    Payment notification for status Reversed (16):

    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Payment": {
        "ID": 4157363,
        "SkinID": null,
        "ClientIP": null,
        "Created": "20181029134811",
        "MerchantTransactionID": "testCORE00001",
        "OriginatorTransactionID": null,
        "Amount": "100",
        "Currency": "EUR",
        "CapturedAmount": null,
        "ReturnURL": "",
        "Description": "test Smart2Pay",
        "MethodID": 84,
        "MethodOptionID": null,
        "IncludeMethodIDs": null,
        "ExcludeMethodIDs": null,
        "PrioritizeMethodIDs": null,
        "SiteID": 30151,
        "NotificationDateTime": null,
        "Customer": null,
        "BillingAddress": {
          "ID": 1720,
          "City": null,
          "ZipCode": null,
          "State": null,
          "Street": null,
          "StreetNumber": null,
          "HouseNumber": null,
          "HouseExtension": null,
          "Country": "NL"
        },
        "ShippingAddress": null,
        "Articles": null,
        "Details": null,
        "ReferenceDetails": null,
        "CustomParameters": null,
        "PreapprovalID": 13165,
        "Status": {
          "ID": 16,	
          "Info": "Reversed",
          "Reasons": [
            {	
              "Code": "235",
              "Info": "R-Transaction : MD06 - Disputed authorized transaction."
            }	
          ]	
        },	
        "MethodTransactionID": null,
        "TokenLifetime": null,
        "Capture": null,
        "PreapprovalDetails": null,
        "RedirectURL": null
      }
    }

    Response:

    204 No Content

    SEPA Direct Debit Preapproval Notification

    Upon successful approval, we will notify you about the new status of the preapproval to the URL you setup in the Merchant Dashboard.

    You need to respond with HTTP Status 204 (No Content)!

    Preapproval notification for status Open (2):

    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Preapproval": {
        "ID": 13199,
        "Created": "20181101142508",
        "MethodID": 84,
        "SiteID": 30201,
        "MerchantPreapprovalID": "s2ptest_h11",
        "RecurringPeriod": 0,
        "PreapprovedMaximumAmount": null,
        "Currency": null,
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "SEPA DD preapproval request",
        "Customer": {
          "ID": 135127,
          "MerchantCustomerID": null,
          "Email": "youremail@gmail.com",
          "FirstName": "John",
          "LastName": "Doe",
          "Gender": null,
          "SocialSecurityNumber": null,
          "SocialSecurityNumber2": null,
          "Phone": "+31651111111",
          "Company": null,
          "DateOfBirth": null
        },
        "BillingAddress": {
          "ID": 5103,
          "City": "Laren",
          "ZipCode": "1251",
          "State": null,
          "Street": "Brink",
          "StreetNumber": "27c",
          "HouseNumber": null,
          "HouseExtension": null,
          "Country": "NL"
        },
        "Status": {
          "ID": 2,
          "Info": null,
          "Reasons": null
        },
        "RedirectURL": null,
        "MethodOptionID": 0,
        "PreapprovedFrequency": null,
        "MandateReference": "SLMP004606504"
      }
    }
    

    Response:

    204 No Content

    The message contains a Preapproval object with an updated Status, which can have the following meanings:

    PREAPPROVAL STATUS
    ID Info Description
    1 Pending The customer needs to confirm the preapproval
    2 Open The customer confirmed and you can use the preapproval to initiate recurring payments
    4 ClosedByCustomer The preapproval is closed and can no longer be used to initiate recurring payments

    If the mandate is cancelled by the customer or there is an error in the creation process than a notification with the specific reason is sent.

    Preapproval notification for status ClosedByCustomer (4):

    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Preapproval": {
        "ID": 729222,
        "Created": "20181025083420",
        "MethodID": 84,
        "SiteID": 30025,
        "MerchantPreapprovalID": "preapptestingS4526352",
        "RecurringPeriod": 0,
        "PreapprovedMaximumAmount": null,
        "Currency": null,
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "sample description",
        "Customer": {
          "ID": 341703,
          "MerchantCustomerID": null,
          "Email": "youremail@gmail.com",
          "FirstName": "John",
          "LastName": "Doe",
          "Gender": null,
          "SocialSecurityNumber": "",
          "SocialSecurityNumber2": null,
          "Phone": "+40765260000",
          "Company": "Smart2Pay",
          "DateOfBirth": null
        },
        "BillingAddress": {
          "ID": 8438,
          "City": "Iași",
          "ZipCode": "23900000",
          "State": null,
          "Street": "Sf. Lazar",
          "StreetNumber": "1",
          "HouseNumber": null,
          "HouseExtension": null,
          "Country": "RO"
        },
        "Status": {
          "ID": 4,
          "Info": null,
          "Reasons": [
            {
              "Code": "246",
              "Info": "Preapproval cancelled by consumer"
            }
          ]
        },
        "RedirectURL": null,
        "MethodOptionID": 0,
        "PreapprovedFrequency": null,
        "MandateReference": null
      }
    }

    For more information about the reasons of a wrong request response see our section GlobalPay Return Codes.

    SEPA Direct Debit Preapproval Request

    General information to be known for SEPA Direct Debit:

    • The customer’s bank needs to be enrolled in the SEPA Direct Debit CORE scheme or this service needs to be activated on the customer’s bank account.
    • Ask customer to make sure they have the necessary funds in their account. Up to 80% of payments failures are caused by insufficient amount.
    • According to SEPA Direct Debit rules, the customers can Reverse/Cancel a Direct Debit (claim the money back) in 8 weeks, no questions asked and up to 13 months, if his bank agrees. If this happens, you will receive a Reversed notification with ReasonCode and Reason (R-Transaction) which you should properly handle on your side.
    • For B2B transactions please add the CompanyName parameter.
    • The currency for SEPA Direct Debit CORE is EUR, however the customers can use their account although this is not an EUR account as long as the bank is enrolled in SEPA Direct Debit CORE scheme. In this case, some exchange fees might be charged by their bank.
    • Merchants/Users can decide the actual ExecutionDate of a mandate – they can send the date on which the amount will actually be debited from the Debtor’s account.

    Checkout the below example of a preapproval request for SEPA Direct Debit (84), where MethodOptionID parameter is mandatory to be sent in the initial payment request.

    Please note that if you have a Company, you also need to send the Company parameter in the request.

    A 201 HTTP response (Created) is returned if the payment was correctly initialized.

    Request:

    POST https://paytest.smart2pay.com/v1/preapprovals
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Preapproval": {
        "MerchantPreapprovalID": "s2ptest_h11",
        "Description": "SEPA DD preapproval request",
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "MethodID": 84,
        "Customer": {
          "FirstName": "John",
          "LastName": "Doe",
          "Email": "youremail@gmail.com",
          "Phone": "+31651111111"
        },
        "BillingAddress": {
          "Street": "Brink",
          "StreetNumber": "27c",
          "ZipCode": "1251",
          "City": "Laren",
          "Country": "NL"
        },
        "MethodOptionID": 1
      }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Preapproval": {
            "ID": 13199,
            "Created": "20181101142508",
            "MethodID": 84,
            "SiteID": 30201,
            "MerchantPreapprovalID": "s2ptest_h11",
            "RecurringPeriod": 0,
            "PreapprovedMaximumAmount": null,
            "Currency": null,
            "ReturnURL": "http://demo.smart2pay.com/redirect.php",
            "Description": "SEPA DD preapproval request",
            "Customer": {
                "ID": 135127,
                "MerchantCustomerID": null,
                "Email": "youremail@gmail.com",
                "FirstName": "John",
                "LastName": "Doe",
                "Gender": null,
                "SocialSecurityNumber": null,
                "SocialSecurityNumber2": null,
                "Phone": "+31651111111",
                "Company": null,
                "DateOfBirth": null
            },
            "BillingAddress": {
                "ID": 5103,
                "City": "Laren",
                "ZipCode": "1251",
                "State": null,
                "Street": "Brink",
                "StreetNumber": "27c",
                "HouseNumber": null,
                "HouseExtension": null,
                "Country": "NL"
            },
            "Status": {
                "ID": 1,
                "Info": "Pending",
                "Reasons": null
            },
            "RedirectURL": "https://europaytest.smart2pay.com/SlimPay/Landing/PreapprovalLanding.aspx?ID=10084&Hash=CD71CA781BD1F59F52F8F0B2D20A807E",
            "MethodOptionID": 1,
            "PreapprovedFrequency": null,
            "MandateReference": null
        }
    }

    Redirect the customer to the RedirectURL where he will approve the automatic debit. Once the Customer approves the debit, he will receives via email the digital signed mandate.

    SEPA Direct Debit Timeline

    Checkout the below SEPA Direct Debit Timeline explained:

    • D-14: Pre-notification for recurrent Direct Debits;
    • D-2: The merchant initiates a SEPA DD – the payment has status Open. If the Direct debit request fails for technical reasons (e.g connection time out), the payment status moves to Failed with ReasonCode and Reason. This is not an incident (R-transaction), it is only a technical failure of the request;
    • D-1: The provider submits the SEPA DD into the network. If the SEPA DD is initiated early in the morning, then it will be submitted in the network in the same day D-1;
    • D: The D day is known as the Execution day for a SEPA Direct Debit – funds are transferred from debtor’s bank to the merchant’s SEPA DD account.;
    • D -> D+5: the payment remains Open unless an incident (R-Transaction) is reported. If an incident – reject, refusal, return – is registered, a notification for status Failed with ReasonCode and Reason (including the R-Transaction code) will be sent to the merchant;
    • D+6: If no incident occurred until D+5, the transaction is settled and the SEPA DD updates to status Success. Now the merchant can provide the product/service to the customer;
    • D+6 -> D+8 weeks / D+13 months: If the customer does not recognize the Direct Debit, he can claim the money back in 8 weeks, no questions asked and up to 13 months, if the customer’s bank agrees. This situation is also considered an incident (R-Transaction). If this happens, you will receive a Reversed notification with ReasonCode and Reason (including the R-Transaction) which you should properly handle on your side.

    All days should be considered banking days!

    Pre-notification:

    Debtor pre-notification: is a 14 days notification period (this can be reduced upon debtor agreement).

    This pre-notification must include the following information: the payment due date, the payment amount, the Unique Mandate Reference and the merchant Creditor Identifier. There is no requirement regarding the method of communication, meaning that this can be done through agreement on General Terms and Conditions, it can be solely written on an invoice, it can be displayed in an online customer account.

    SEPA Direct Debit Recurring Payment

    Direct Debits can be initiated based on the PreapprovalID received in the Preapproval response. If you wish to have the Direct Debit executed at a specific date, you only need to send in the request the ExecutionDate parameter.

    • Recurring payment request for SEPA Direct Debit (84) that is based on the PreapprovalID (also send in the request the Description parameter and Country parameter that should be the same with the ones sent in the Preapproval request):

      Request:

      POST https://paytest.smart2pay.com/v1/payments/recurrent
      Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
      
      {
       "Payment": {
         "PreapprovalID":13199,
         "MerchantTransactionID": "s2ptest_h13",
         "Amount": 100,
         "Currency": "EUR",
         "MethodID": 84,
         "Description":"SEPA DD recurrent payment",
         "BillingAddress": {
           "Country": "NL"
          }
        }
      }

    • Recurring payment request for SEPA Direct Debit (84) that includes ExecutionDate parameter:

      Execution day for a SEPA Direct Debit – the moment funds are transferred from debtor’s bank to the merchant’s SEPA DD account.This can be setup by the Merchant/customer by sending ExecutionDate in the Direct Debit payment request or it can be set by default by the SEPA DD provider (which is usually set at 1-2 days from the Direct Debit payment request date).

      Request:

      POST https://paytest.smart2pay.com/v1/payments/recurrent
      Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
      
      {
       "Payment": {
         "PreapprovalID":13165,
         "MerchantTransactionID": "s2ptest_h19",
         "Amount": 100,
         "Currency": "EUR",
         "MethodID": 84,
         "Description":"SEPA recurrent payment with executiondate",
         "BillingAddress": {
           "Country": "NL"
          },
         "ExecutionDate": "20200805"
        }  
      }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Payment": {
            "ID": 4167022,
            "SkinID": null,
            "ClientIP": null,
            "Created": "20181101145456",
            "MerchantTransactionID": "s2ptest_h13",
            "OriginatorTransactionID": null,
            "Amount": "100",
            "Currency": "EUR",
            "CapturedAmount": null,
            "ReturnURL": null,
            "Description": "SEPA DD recurrent payment",
            "MethodID": 84,
            "MethodOptionID": null,
            "IncludeMethodIDs": null,
            "ExcludeMethodIDs": null,
            "PrioritizeMethodIDs": null,
            "SiteID": 30201,
            "NotificationDateTime": null,
            "Customer": null,
            "BillingAddress": {
                "ID": 309,
                "City": null,
                "ZipCode": null,
                "State": null,
                "Street": null,
                "StreetNumber": null,
                "HouseNumber": null,
                "HouseExtension": null,
                "Country": "NL"
            },
            "ShippingAddress": null,
            "Articles": null,
            "Details": null,
            "ReferenceDetails": null,
            "CustomParameters": null,
            "PreapprovalID": 13199,
            "Status": {
                "ID": 1,
                "Info": "Open",
                "Reasons": null
            },
            "MethodTransactionID": null,
            "TokenLifetime": null,
            "Capture": null,
            "PreapprovalDetails": null,
            "RedirectURL": null
        }
    }

    Nuvei Android SDK Instructions for Alipay and Wechat (Kotlin)

    Now that you have imported the Smart2Pay.SDK package into your app, you need to follow the below steps in order to set up the Mobile SDK for Android in Kotlin language.

    If you are using Java go to our section: Nuvei Mobile SDK Configuration using Java language.

    First of all you need to start using and install the Kotlin plugin for Android development. For more information, please visit: Getting started with Android and Kotlin.

    Configure Kotlin in your project by following the steps below:

    • Click Tools | Kotlin | Configure Kotlin in Project.
    • Select Android.
    • Check if all modules and the selected Kotlin version are correct.
    • Press OK and Kotlin is now part of your Java project.
    1. [APP] Create an order to your server

      //sample code, put your own logic of creating an order to your server
      val orderParameters = HashMap<String, Any>()
              orderParameters["amount"] = "10"
              orderParameters["currency"] = "CNY"
              orderParameters["methodID"] = paymentManager.getMethodId(payment.type).toString()
      
              val paymentsRequest = PaymentsRequest(RequestManager.instance)
              paymentsRequest.setRequestBody(orderParameters)
              paymentsRequest.callback =
                      object : PaymentsRequest.Callback {
                          override fun onSuccess(paymentId: Int, paymentsResponse: String) {
                              payment.id = paymentId
                              payment.instructions = paymentsResponse
                              paymentManager.pay(payment)
                          }
      
                          override fun onFailure() {
      
                          }
                      }
              paymentsRequest.enqueue()
      
    2. [SERVER] Once the order is created on your server, from the server create a Payment using our REST API and specifying isMobileApp: true.

      
      {
        "Payment": {
          "MerchantTransactionID": "{{tester}}-{{env}}-{{time}}-{{rand}}",
          "Amount": "100",
          "Currency": "CNY",
          "ReturnURL": "https://www.merchant.com/return",
          "MethodID" : "24",
          "Customer":{
            "Email": "john.doe@isp.com"
          },
          "Details":{
          "IsMobileApp": true
          }
      
        }
      }
      
    3. [SERVER] Our server responds with Instructions field which you need to pass to the app.

      {
        "Payment": {
          "ID": 4164863,
          "MethodID": 24,
          […]
          },
          "ReferenceDetails": {
      […]
            "Instructions": "_input_charset=\"utf-8\"&appenv=\"system=android^version=3.0.1.2\"&body=\"Alipay Payment\"&currency=\"USD\"&forex_biz=\"FP\"&notify_url=\"https://europaytest.smart2pay.com/Alipay/Landing/AlipayNotificationURL.aspx\"&out_trade_no=\"s2ptest200336\"&partner=\"2088201612260077\"&payment_type=\"1\"&rmb_fee=\"1\"&secondary_merchant_id=\"GP1045\"&secondary_merchant_industry=\"5946\"&secondary_merchant_name=\"demo iasi test\"&seller_id=\"2088201612260077\"&service=\"mobile.securitypay.pay\"&subject=\"Alipay Payment\"&supplier=\"demo iasi test\"&sign=\"vRQ1ouMvn0rJUCxSEi91RLJcS0NU7mojYfJpfT8gxtctF8jfJ4x6uN8t0ETdDdmGziqP7IsYHTSAHdFLHGO4hQdovyzJMna42nc9DcfMMlhTX7ZVCa7rUuieBWcW0ek8w3DxojrWnWT9lM3lUQZVLsY1CjXFGJ126x4TnjrA86w%3d\"&sign_type=\"RSA\""
            },
          "Status": {
            "ID": 1,
            "Info": "Open",
            "Reasons": null
            },
            […]
        }
      }
      
    4. [APP] Pass the instructions from the response to the payment object together with the payment type and Activity.

      override fun onSuccess(paymentId: Int, paymentsResponse: String) {
                              payment.id = paymentId
                              payment.instructions = paymentsResponse
                              payment.activity = this@MainActivity
                              […]
                              }
      
    5. [APP] Call Nuvei Mobile SDK by calling pay() function from the paymentManager object.

      override fun onSuccess(paymentId: Int, paymentsResponse: String) {
                              [...]
                              paymentManager.pay(payment)
                              }
      

      The information needed inside the Payment object of our mobile SDK:

      class Payment {
          enum class PaymentProvider {
              NONE,
              ALIPAY,
              WECHAT
          }
          var id: Int = 0
          var type = PaymentProvider.NONE
          var instructions: String = "" 
          var activity: Activity
      }

      When pasting this into your code the imports should go automatically or you can add them manually:

      import com.smart2pay.sdk.PaymentManager
      import com.smart2pay.sdk.models.Payment
    6. [SDK] Our SDK triggers Alipay or WeChat application

    7. [User] The user completes the payment

    8. [SDK] Alipay or WeChat application passes the status to our mobile SDK

    9. [APP] Our SDK calls one of the two callbacks onPaymentSuccess or onPaymentFailure, depending on the payment result.

      Make sure the activity uses the Interface:

      PaymentManager.PaymentManagerEventListener

      For example your activity could look like this:

      class MainActivity : AppCompatActivity(), PaymentManager.PaymentManagerEventListener {

      Add these two functions to get the callbacks from the Payment Manager:

      override fun onPaymentFailure(payment: Payment) {
      }
      override fun onPaymentSuccess(payment: Payment) {
      }
    10. [APP] Inside onPaymentSuccess, before displaying the result to the user and providing the service you need to do a server verification by calling from the server our payment verification API. Call your server from the App to ask for the verification result. – (Only for Alipay payments)

    11. [SERVER] You need to pass the Nuvei payment ID and the message received from Nuvei mobile SDK. – (Only for Alipay payments)

      POST {{entryPoint}}/{{version}}/payments/{id}/verify
      
      {
         "message": "partner=\"2088101568358171\"&out_trade_no=\"0819145412-6177\"&subject=\"test\"&body=\"testtest\"&total_fee=\"0.01\"&notify_url=\"http://notify.msp.hk/notify.htm\"&service=\"mobile.securitypay.pay\"&payment_type=\"1\"&_input_charset=\"utf-8\"&it_b_pay=\"30m\"&success=\"true\"&sign_type=\"RSA\"&sign=\"hkFZr+zE9499nuqDNLZEF7W75RFFPsly876QuRSeN8WMaUgcdR00IKy5ZyBJ4eldhoJ/2zghqrD4E2G2mNjs3aE+HCLiBXrPDNdLKCZgSOIqmv46TfPTEqopYfhs+o5fZzXxt34fwdrzN4mX6S13cr3UwmEV4L3Ffir/02RBVtU="
      }
      
    12. [SERVER] Our API checks the transaction and replies back with the status of the verification. – (Only for Alipay payments)

      {
          "status": "Success"
      }
      
    13. [SERVER] If the “status” is Success you can deliver the goods or services. Pass this result to the App. – (Only for Alipay payments)

    14. [APP] Display the payment result to the user.

    15. [SERVER] As a backup for any client communication issues, Nuvei will also send to your server a backend notification as documented here: Payment Notification.

    SDK is now fully functional in your app!

    Nuvei Android SDK Instructions for Alipay and Wechat (Java)

    Now that you have imported the Smart2Pay.SDK package into your app, you need to follow the below steps in order to set up the Mobile SDK for Android in Java language.

    If you are using Kotlin go to our section: Nuvei Mobile SDK Configuration using Kotlin language.

    1. [APP] Create an order to your server

      //sample code, put your own logic of creating an order to your server
      order order = new Order()
      order.setAmount(1);
      order.setCurrency("CNY");
      order.setType(Payment.PaymentProvider.ALIPAY); //or Payment.PaymentProvider.WECHAT
      order.create();
      
    2. [SERVER] Once the order is created on your server, from the server create a Payment using our REST API and specifying isMobileApp: true.

      {
        "Payment": {
          "MerchantTransactionID": "{{tester}}-{{env}}-{{time}}-{{rand}}",
          "Amount": "100",
          "Currency": "CNY",
          "ReturnURL": "https://www.merchant.com/return",
          "MethodID" : "24",
          "Customer":{
            "Email": "john.doe@isp.com"
          },
          "Details":{
            "IsMobileApp": true
          }
        }
      }
      
    3. [SERVER] Our server responds with Instructions field which you need to pass to the app.

      {
        "Payment": {
          "ID": 4164863,
          "MethodID": 24,
          […]
          },
          "ReferenceDetails": {
      […]
            "Instructions": "_input_charset=\"utf-8\"&appenv=\"system=android^version=3.0.1.2\"&body=\"Alipay Payment\"&currency=\"USD\"&forex_biz=\"FP\"&notify_url=\"https://europaytest.smart2pay.com/Alipay/Landing/AlipayNotificationURL.aspx\"&out_trade_no=\"s2ptest200336\"&partner=\"2088201612260077\"&payment_type=\"1\"&rmb_fee=\"1\"&secondary_merchant_id=\"GP1045\"&secondary_merchant_industry=\"5946\"&secondary_merchant_name=\"demo iasi test\"&seller_id=\"2088201612260077\"&service=\"mobile.securitypay.pay\"&subject=\"Alipay Payment\"&supplier=\"demo iasi test\"&sign=\"vRQ1ouMvn0rJUCxSEi91RLJcS0NU7mojYfJpfT8gxtctF8jfJ4x6uN8t0ETdDdmGziqP7IsYHTSAHdFLHGO4hQdovyzJMna42nc9DcfMMlhTX7ZVCa7rUuieBWcW0ek8w3DxojrWnWT9lM3lUQZVLsY1CjXFGJ126x4TnjrA86w%3d\"&sign_type=\"RSA\""
          },
          "Status": {
            "ID": 1,
            "Info": "Open",
            "Reasons": null
            },
         […]
        }
      }
      
    4. [APP] Get the instructions from the server response.

      String instructions = order.getInstructions();
    5. [APP] Call Nuvei Mobile SDK by creating a Payment object, passing the Activity, payment type and instructions. Then trigger the payment using a PaymentManager object.

      Payment payment = new Payment();
          payment.setInstructions(instructions);
          payment.setType(Payment.PaymentProvider.ALIPAY);
          payment.setActivity(this);
      
          PaymentManager paymentManager = new PaymentManager();
          paymentManager.pay(payment);

      The information needed inside the Payment object of our mobile SDK:

      class Payment {
          enum PaymentProvider {
              NONE,
              ALIPAY,
              WECHAT
          };
          int ID;
          PaymentProvider type;
          String instructions;
          Activity activity;
      }

      When pasting this into your code the imports should go automatically or you can add them manually:

      import com.smart2pay.sdk.PaymentManager;
      import com.smart2pay.sdk.models.Payment;
    6. [SDK] Our SDK triggers Alipay or WeChat application

    7. [User] The user completes the payment

    8. [SDK] Alipay or WeChat application passes the status to our mobile SDK

    9. [APP] Our SDK calls one of the two callbacks onPaymentSuccess or onPaymentFailure, depending on the payment result.

      Make sure the activity uses the Interface:

      PaymentManager.PaymentManagerEventListener

      For example your activity could look like this:

      public class MainActivity extends AppCompatActivity implements PaymentManager.PaymentManagerEventListener {

      Add these two functions to get the callbacks from the Payment Manager:

      @Override
      public void onPaymentSuccess(Payment payment) {
          
      }
      @Override
      public void onPaymentFailure(Payment payment) {
          
      }
    10. [APP] Inside onPaymentSuccess, before displaying the result to the user and providing the service you need to do a server verification by calling from the server our payment verification API. Call your server from the App to ask for the verification result. – (Only for Alipay payments)

    11. [SERVER] You need to pass the Nuvei payment ID and the message received from Nuvei mobile SDK. – (Only for Alipay payments)

      POST {{entryPoint}}/{{version}}/payments/{id}/verify
      
      {
         "message": "partner=\"2088101568358171\"&out_trade_no=\"0819145412-6177\"&subject=\"test\"&body=\"testtest\"&total_fee=\"0.01\"&notify_url=\"http://notify.msp.hk/notify.htm\"&service=\"mobile.securitypay.pay\"&payment_type=\"1\"&_input_charset=\"utf-8\"&it_b_pay=\"30m\"&success=\"true\"&sign_type=\"RSA\"&sign=\"hkFZr+zE9499nuqDNLZEF7W75RFFPsly876QuRSeN8WMaUgcdR00IKy5ZyBJ4eldhoJ/2zghqrD4E2G2mNjs3aE+HCLiBXrPDNdLKCZgSOIqmv46TfPTEqopYfhs+o5fZzXxt34fwdrzN4mX6S13cr3UwmEV4L3Ffir/02RBVtU="
      }
    12. [SERVER] Our API checks the transaction and replies back with the status of the verification. – (Only for Alipay payments)

      {
          "status": "Success"
      }
      
    13. [SERVER] If the “status” is Success you can deliver the goods or services. Pass this result to the App. – (Only for Alipay payments)

    14. [APP] Display the payment result to the user.

    15. [SERVER] As a backup for any client communication issues, Nuvei will also send to your server a backend notification as documented here: Payment Notification.

    SDK is now fully functional in your app!

    Nuvei Android SDK Installation

    You need to follow the below steps to build an in-app payment flow using Smart2Pay.SDK.Payment, a class designed to make building your app’s checkout flow as easy as possible.

    1. Download the smart2pay.aar file located at: https://github.com/Smart2Pay/SDK-Android-Release/tree/master/releases.
    2. Place the .aar file in the app/libs folder.
    3. Add this to your app Gradle file and click on the Sync Now button.
      dependencies {
          api files('libs/smart2pay.aar')
      }

    Now that the SDK is in the app, you can actually use it in the code. Continue with setting up the SDK:

    Nuvei Mobile SDK

    By using Nuvei SDK for mobile, you can quickly integrate more payment options directly in your mobile application. Our SDK provides one unique interface to Cards, Alipay and WeChat in-app payments.

    You can download our mobile SDK for Android and iOS together with demo projects from Github:

    For Alipay and Wechat, the payments are initiated by the user from the mobile app and the initial message is sent by your server to our REST API in the usual way (see Create a payment), plus sending an additional parameter IsMobileApp: true. We will respond back with the Instructions field that needs to be passed from your app to our SDK. Our SDK handles the various calls to Alipay or WeChat apps and returns the control to your app for the final verification of the status.

    Besides Alipay and WeChat, our Mobile SDK can be used for in-app purchases using Credit Cards. The advantage of using our SDK is that the credit card details never reach your server, simplifying to a minimum the PCI requirements you must meet.

    For more details regarding the installation and the configuration of the SDK, please go to the below sections:

    Tingg Test Data

    In order for you to test Tingg payment method available in Nigeria, please use the below test data.

    Tingg (Nigeria) Test Data
    Data Value
    Phone 23485844338

    Tingg (Nigeria) Payment Flow

    1. The customer fills in his first and last name, his email address and his phone number.

      1 Payment instructions

    2. The customer receives all the details needed to complete the payment.

    3. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    NIBSS Test Data

    In order for you to test NIBSS payment method available in Nigeria, please use the below test data.

    NIBSS (Nigeria) Test Data
    Data Value
    Phone 23485844338

    NIBSS (Nigeria) Payment Flow

    1. The customer fills in his first and last name, his email address and his phone number.

      1 Payment instructions

    2. The customer receives all the details needed to complete the payment.

    3. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    PesaLink (Kenya) Test Data

    In order for you to test PesaLink payment method available in Kenya, please use the below test data.

    PesaLink (Kenya) Test Data
    Data Value
    Phone 255653560949

    PesaLink (Kenya) Payment Flow

    1. The customer fills in his personal details, including: his first and last name, email address and phone number. Then, the customer chooses the desired bank from the provided list.

      1 Payment instructions

    2. The customer receives the details needed to complete the payment.

      1 Payment instructions

    3. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    MTN Test Data

    In order for you to test MTN payment method available in Uganda, please use the below test data.

    MTN Test Data
    Data Value
    Phone 256387676229

    MTN (Uganda) Payment Flow

    1. The customer fills in his first and last name, his email address and his phone number.1 Payment instructions
    2. The customer receives the details needed to complete the payment.1 Payment instructions
    3. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.1 Return page when the redirection status is a success

    Equitel Test Data

    In order for you to test Equitel payment method available in Kenya, please use the below test data.

    Equitel (Kenya) Test Data
    Data Value
    Phone 254725362916

    Equitel (Kenya) Payment Flow

    1. The customer fills in his first and last name, his email address and his phone number.

      1 Payment instructions

    2. The customer receives the details needed to complete the payment.

      1 Payment instructions

    3. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    Airtel Money (Uganda) Test Data

    In order for you to test Airtel Money payment method available in Uganda, please use the below test data.

    Airtel Money (Uganda) Test Data
    Data Value
    Phone 256428789696

    Airtel Money (Uganda) Payment Flow

    1. The customer fills in his first and last name, his email address and his phone number.

      1 Payment instructions

    2. The customer receives the details needed to complete the payment.

      1 Payment instructions

    3. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    Airtel Money (Kenya) Test Data

    In order for you to test Airtel Money payment method available in Kenya, please use the below test data.

    Airtel Money (Kenya) Test Data
    Data Value
    Phone 254725362916

    Airtel Money (Kenya) Payment Flow

    1. The customer fills in his first and last name, his email address and his phone number.

      1 Payment instructions

    2. The customer receives the details needed to complete the payment.

      1 Payment instructions

    3. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    Airtel Money Test Data

    In order for you to test Airtel Money payment method available in Tanzania, please use the below test data.

    Airtel Money (Tanzania) Test Data
    Data Value
    Phone 255737306783

    Please click on the appropriate link below, to see how Airtel Money payment method works in Kenya, Ghana and Uganda:

    Airtel Money (Tanzania) Payment Flow

    1. The customer fills in his first and last name, his email address and his phone number.1 Payment instructions
    2. The customer receives the details needed to complete the payment.1 Payment instructions
    3. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.1 Return page when the redirection status is a success

    M-Pesa (Tanzania) Test Data

    In order for you to test M-Pesa payment method available in Tanzania, please use the below test data.

    M-Pesa (Tanzania) Test Data
    Data Value
    Phone 255653560949

    M-Pesa (Tanzania) Payment Flow

    1. The customer fills in his first and last name, his email address and his phone number.

      1 Payment instructions

    2. The customer receives the details needed to complete the payment.

      1 Payment instructions

    3. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    M-Pesa Test Data

    In order for you to test M-Pesa payment method, please use the below test data.

    M-Pesa Test Data
    Data Value
    Phone 254716737623


    M-Pesa (Kenya) Payment Flow

    1. The customer fills in his first and last name, his email address and his phone number.1 Payment instructions
    2. The customer receives the details needed to complete the payment.1 Payment instructions
    3. The customer receives a push notification to his mobile and confirms the payment.1 Payment instructions
    • In case the customer has not received the M-Pesa prompt on his phone, there is another possibility to complete a M-Pesa payment flow by following the instructions:
    1. The customer opens the SIM Tool Kit and selects “M-Pesa” menu.1 Payment instructions
    2. The customer selects “Lipa na M-Pesa”.1 Payment instructions
    3. The customer selects the “Pay Bill” option.1 Payment instructions
    4. The customer enters his business number.1 Payment instructions
    5. The customer enters his account number.1 Payment instructions
    6. The customer needs to enter the amount.1 Payment instructions
    7. The customer needs to enter his M-Pesa PIN number and press “OK” button to complete the payment.1 Payment instructions
    8. The customer receives the payment details. If the details are correct he needs to press “OK” button to confirm the payment.1 Payment instructions

    WeChat POS Test Data

    For WeChat payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    WeChat POS Payment Flow

    1. The customer selects his preferred currency from the list and enters his email address.

      1 Enter email

    2. You can skip this step by sending in the initial POST the following parameters: SkipHPP=1 and CustomerEmail.

    3. The Customer is redirected to WeChat payment page.

      1 WeChat payment page

    4. The Customer opens WeChat application and scans the QR code.

      1 QR code scanning

    5. The payment details are displayed and the customer confirms by using the payment password.

      1 Payment confirmation

    6. The payment is confirmed.

      1 Payment successful

    7. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is Processing

    Alipay POS Test Data

    For Alipay payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Alipay POS Payment Flow

      1. The Customer selects his preferred currency from the list and continues the payment.1 Select currency

    You can skip this step by sending in the initial POST the following parameters: SkipHPP=1 and CustomerEmail.

    1. The Customer is redirected to Alipay payment page. The Customer opens Alipay application and scans the QR code.1 Payment version
    2. The payment details are displayed on the client’s Alipay app on their smartphone; the customer confirms the payment by pressing Pay now.
    3. Upon completion of the payment flow, the customer is redirected back to your ReturnURL by pressing the Return to Merchant button1 Return page when the redirection status is Processing

    WeChat POS Payment Request

    Definition: POST https://paytest.smart2pay.com/v1/payments

    Below you will find a full example of a payment request for WeChat POS method (with Success and Bad response). The parameters of the payment are sent in the message body as a JSON object.

    For WeChat POS payments the IsOffline parameter set to true is mandatory to be sent in the request:

    • IsOffline – Offline payment method;

    A 201 HTTP response (Created) is returned if the payment was correctly initialized.

    For more information about status codes, please go to Basic HTTP Status Codes.

    Request: 

    POST https://paytest.smart2pay.com/v1/payments
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Payment": {
        "MerchantTransactionID": "s2ptest_k2",
        "Amount": 11,
        "Currency": "CNY",      
        "MethodID": 1066,
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",      
        "TokenLifetime": 10,
        "Customer": {    
          "Email": "youremail@email.com"   
        },
        "BillingAddress": {
          "Country": "CN"
          }
      }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
      "Payment": {
        "ID": 4116540,
        "SkinID": null,
        "ClientIP": null,
        "Created": "20181009113622",
        "MerchantTransactionID": "s2ptest_k2",
        "OriginatorTransactionID": null,
        "Amount": "11",
        "Currency": "CNY",
        "CapturedAmount": null,
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "",
        "MethodID": 1066,
        "MethodOptionID": null,
        "IncludeMethodIDs": null,
        "ExcludeMethodIDs": null,
        "PrioritizeMethodIDs": null,
        "SiteID": 30201,
        "NotificationDateTime": null,
        "Customer": {
          "ID": 340,
          "MerchantCustomerID": null,
          "Email": "youremail@email.com",
          "FirstName": null,
          "LastName": null,
          "Gender": null,
          "SocialSecurityNumber": null,
          "SocialSecurityNumber2": null,
          "Phone": null,
          "Company": null,
          "DateOfBirth": null
          },
        "BillingAddress": {
          "ID": 291,
          "City": null,
          "ZipCode": null,
          "State": null,
          "Street": null,
          "StreetNumber": null,
          "HouseNumber": null,
          "HouseExtension": null,
          "Country": "CN"
          },
        "ShippingAddress": null,
        "Articles": null,
        "Details": null,
        "ReferenceDetails": {
          "BankCode": null,
          "BankName": null,
          "EntityID": null,
          "EntityNumber": null,
          "ReferenceID": null,
          "ReferenceNumber": null,
          "SwiftBIC": null,
          "AccountCurrency": null,
          "AccountNumber": null,
          "AccountHolder": null,
          "IBAN": null,
          "QRCodeURL": "weixin://wxpay/bizpayurl?pr=qXY38eE",
          "Instructions": null
          },
        "CustomParameters": null,
        "PreapprovalID": null,
        "Status": {
          "ID": 1,
          "Info": "Open",
          "Reasons": null
          },
        "MethodTransactionID": null,
        "TokenLifetime": 10,
        "Capture": null,
        "PreapprovalDetails": null,
        "RedirectURL": "https://apitest.smart2pay.com/Home?PaymentToken=73EF92D30E6E3D90ED2E9FE4A9238FC3.4116540"
      }
    }

    In case of an API error, an HTTP 4xx (you did something wrong) or HTTP 5xx (we did something wrong) response is returned.

    For more information about the reasons of a wrong request response see our section GlobalPay Return Codes.

    Request:

    POST https://paytest.smart2pay.com/v1/payments
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Payment": {
        "MerchantTransactionID": "s2ptest_k4",
        "Amount": 11,
        "Currency": "CN",      
        "MethodID": 1066,
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",      
        "TokenLifetime": 10,
        "Customer": {    
          "Email": "youremail@email.com"   
        },
        "BillingAddress": {
          "Country": "CN"
        }
      }
    }

    Response:

    HTTP/1.1 400 Bad Request
    Content-Type: application/json; charset=utf-8
    
    {
      "Payment": {
        "ID": null,
        "SkinID": null,
        "ClientIP": null,
        "Created": null,
        "MerchantTransactionID": "s2ptest_k4",
        "OriginatorTransactionID": null,
        "Amount": "11",
        "Currency": "CN",
        "CapturedAmount": null,
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": null,
        "MethodID": 1066,
        "MethodOptionID": null,
        "IncludeMethodIDs": null,
        "ExcludeMethodIDs": null,
        "PrioritizeMethodIDs": null,
        "SiteID": null,
        "NotificationDateTime": null,
        "Customer": null,
        "BillingAddress": null,
        "ShippingAddress": null,
        "Articles": null,
        "Details": null,
        "ReferenceDetails": null,
        "CustomParameters": null,
        "PreapprovalID": null,
        "Status": {
          "ID": null,
          "Info": null,
          "Reasons": [
          {
            "Code": 2,
            "Info": "Validation failed - Currency (RegEx: ^[A-Z]{3}$)"
            }
          ]
        },
        "MethodTransactionID": null,
        "TokenLifetime": null,
        "Capture": null,
        "PreapprovalDetails": null,
        "RedirectURL": null
      }
    }

    Alipay POS Payment Request

    Definition: POST https://paytest.smart2pay.com/v1/payments

    Below you will find a full example of a payment request for Alipay POS method (with Success and Bad response). The parameters of the payment are sent in the message body as a JSON object.

    For Alipay POS payments the following Details parameters are mandatory to be sent in the request:

    • IsOffline – Offline payment method;
    • StoreName – Store name. Can be null only when the store information is verified;
    • StoreId – Store ID;
    • TerminalID – POS Terminal ID.

    A 201 HTTP response (Created) is returned if the payment was correctly initialized.

    For more information about status codes, please go to Basic HTTP Status Codes.

    Request:

    POST https://paytest.smart2pay.com/v1/payments
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
        "Payment": {
            "MerchantTransactionID": "AlipayPlus-{{$timestamp}}",
            "Amount": 100,
            "Currency": "CNY",
            "MethodID": 24,
            "ReturnURL": "https://demo2.smart2pay.com/redirect.php",
            "TokenLifetime": 10,
            "BillingAddress": {
                "Country": "CN"
            },
            "Customer": {
                "Email": "test_s2p@test.com",
                "FirstName": "Test",
                "LastName": "Test",
                "Phone": "00000000"
            },
            "Details": {    
          "IsOffline": true,
          "StoreName": "Zara Palace Mall",
          "StoreId": "ZA2345",
          "TerminalID": "T8999"
        }
        }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Payment": {
            "ID": 6883549,
            "SkinID": null,
            "ClientIP": null,
            "Created": "20240321085116",
            "MerchantTransactionID": "AlipayPlus-1711011077",
            "OriginatorTransactionID": null,
            "Amount": "100",
            "Currency": "CNY",
            "CapturedAmount": null,
            "ReturnURL": "https://demo2.smart2pay.com/redirect.php",
            "ReturnURLSuccess": null,
            "ReturnURLFailure": null,
            "ReturnURLCancel": null,
            "ReturnURLProcessing": null,
            "Description": "",
            "MethodID": 24,
            "MethodOptionID": null,
            "MethodOptionIdString": null,
            "BankName": null,
            "IncludeMethodIDs": null,
            "ExcludeMethodIDs": null,
            "PrioritizeMethodIDs": null,
            "SiteID": 30563,
            "NotificationDateTime": null,
            "Customer": {
                "MerchantCustomerID": null,
                "Email": "test_s2p@test.com",
                "FirstName": "Test",
                "LastName": "Test",
                "Gender": null,
                "SocialSecurityNumber": null,
                "Phone": "00000000",
                "Company": null,
                "DateOfBirth": null
            },
            "BillingAddress": {
                "City": null,
                "ZipCode": null,
                "State": null,
                "Street": null,
                "StreetNumber": null,
                "HouseNumber": null,
                "HouseExtension": null,
                "Country": "CN"
            },
            "ShippingAddress": null,
            "Articles": null,
            "Details": {
                "AccountNumber": null,
                "AccountHolder": null,
                "IBAN": null,
                "Address": null,
                "BIC": null,
                "PrepaidCard": null,
                "PrepaidCardPIN": null,
                "ConfirmationCode": null,
                "Store": null,
                "SerialNumbers": null,
                "Wallet": null,
                "ReferenceNumber": null,
                "PayerCountry": null,
                "PayerEmail": null,
                "PayerPhone": null,
                "BankCode": null,
                "Pin": null,
                "BankName": null,
                "BankSortCode": null,
                "BankAccountNumber": null,
                "SocialSecurityNumber": null,
                "BillingCycleStart": null,
                "BillingCycleEnd": null,
                "UnsubscribeInstructions": null,
                "CustomerLoginID": null,
                "PaidAmount": null,
                "PaidCurrency": null,
                "ProviderExchangeRate": 0.0,
                "ProviderBlockChain": null,
                "PayerBankAccountID": null,
                "PayerID": null,
                "CryptoAmount": null,
                "CryptoCurrency": null,
                "CryptoAddress": null,
                "AvailableBalance": null,
                "CurrentBalance": null,
                "Installments": null
            },
            "ReferenceDetails": {
                "BankCode": null,
                "BankName": null,
                "EntityID": null,
                "EntityNumber": null,
                "ReferenceID": null,
                "ReferenceNumber": null,
                "SwiftBIC": null,
                "AccountCurrency": null,
                "AccountNumber": null,
                "AccountHolder": null,
                "IBAN": null,
                "Address": null,
                "AmountToPay": null,
                "QRCodeURL": "https://qr.alipayplus.com/showQrImage?code=281666040092tDqC8ZCNM7QoFo49S3Ev4Z0I&picSize=M",
                "Instructions": null,
                "BoletoURL": null,
                "SortCode": null
            },
            "CustomParameters": null,
            "PreapprovalID": null,
            "Status": {
                "ID": 1,
                "Info": "Open",
                "Reasons": null
            },
            "Fraud": null,
            "MethodTransactionID": "20240321190741010003H0005811115",
            "OriginalMerchantTID": null,
            "Unknown": false,
            "TokenLifetime": 10,
            "Capture": null,
            "PreapprovalDetails": null,
            "RedirectURL": "https://webapp-apm-globalpay-api-qa.nuvei.com/Home?PaymentToken=E3E8959BED00BC85C70EFE666EF40D29.6883549",
            "Splits": null
        }
    }

    In case of an API error, an HTTP 4xx (you did something wrong) or HTTP 5xx (we did something wrong) response is returned.

    For more information about the reasons of a wrong request response see our section GlobalPay Return Codes.

    Request:

    POST https://paytest.smart2pay.com/v1/payments
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
        "Payment": {
            "MerchantTransactionID": "AlipayPlus-{{$timestamp}}",
            "Amount": 100,
            "Currency": "CNY",
            "MethodID": 24,
            "ReturnURL": "https://demo2.smart2pay.com/redirect.php",
            "TokenLifetime": 10,
            "BillingAddress": {
                "Country": "China"
            },
            "Customer": {
                "Email": "test_s2p@test.com",
                "FirstName": "Test",
                "LastName": "Test",
                "Phone": "00000000"
            },
            "Details": {    
          "IsOffline": true,
          "StoreName": "Zara Palace Mall",
          "StoreId": "ZA2345",
          "TerminalID": "T8999"
        }
        }
    }

    Response:

    HTTP/1.1 400 Bad Request
    Content-Type: application/json; charset=utf-8
    
    {
        "Payment": {
            "ID": 6883560,
            "SkinID": null,
            "ClientIP": null,
            "Created": "20240321090237",
            "MerchantTransactionID": "AlipayPlus-1711011757",
            "OriginatorTransactionID": null,
            "Amount": "100",
            "Currency": "CNY",
            "CapturedAmount": null,
            "ReturnURL": "https://demo2.smart2pay.com/redirect.php",
            "ReturnURLSuccess": null,
            "ReturnURLFailure": null,
            "ReturnURLCancel": null,
            "ReturnURLProcessing": null,
            "Description": null,
            "MethodID": 24,
            "MethodOptionID": null,
            "MethodOptionIdString": null,
            "BankName": null,
            "IncludeMethodIDs": null,
            "ExcludeMethodIDs": null,
            "PrioritizeMethodIDs": null,
            "SiteID": 30563,
            "NotificationDateTime": "20240321090237",
            "Customer": null,
            "BillingAddress": null,
            "ShippingAddress": null,
            "Articles": null,
            "Details": null,
            "ReferenceDetails": null,
            "CustomParameters": null,
            "PreapprovalID": null,
            "Status": {
                "ID": 4,
                "Info": "Failed",
                "Reasons": [
                    {
                        "Code": "147",
                        "Info": "Address details are invalid (BillingAddress)Country - RegEx: ^[a-zA-Z]{2}$;"
                    }
                ]
            },
            "Fraud": null,
            "MethodTransactionID": null,
            "OriginalMerchantTID": null,
            "Unknown": false,
            "TokenLifetime": null,
            "Capture": null,
            "PreapprovalDetails": null,
            "RedirectURL": null,
            "Splits": null
        }
    }

    Airtel Money (Kenya) Test Data

    In order for you to test Airtel Money payment method available in Kenya, please use the below test data.

    Airtel Money (Kenya) Test Data
    Data Value
    Phone 254725362916

    Airtel Money (Kenya) Payment Flow

    1. The customer fills in the Phone number.

      1 Payment instructions

    2. The customer receives the details needed to complete the payment.

      1 Payment instructions

    3. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    Alliance Online Test Data

    For Alliance Online payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Alliance Online Payment Flow

    1. The customer enters his email address, name and phone number.

      1 Customer details

    2. The customer is shown the details of his payment and proceeds to pay with Alliance Online.

      1 Payment details

    3. The customer logs in to his account and completes the payment.

      1 Account login

    4. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    Settlement invoice reports

      The Settlement invoice reports are a great tool that allows you to verify each transaction and activity in detail, including:

    • Any type of fee that applies at transaction level is reported with great granularity;
    • Information about all the payment methods traded are available in only one report;
    • The report is the confirmation that the payout to you has been made and thus can be reconciled with the entry into the bank account.

    Settlement invoice reports are available in XLS, PDF and CSV format. The settlement invoices reports are generated depending on the settlement cycle of each payment method.

    Examples of our standard weekly and monthly settlement cycles are provided below:

      Weekly settlement cycle

      The settlement invoice follows our standards weekly settlement cycle, which means that all transactions processed from Friday (day 1) – Thursday (day 7) period, and settled to Nuvei (before and after day 7) are invoiced and settled to your account on the following Tuesday (day 12):

    • Transactions period: Friday, May 18th, 2018 00:00 UTC (day 1) – Thursday, May 24th, 2018 23:59 UTC (day 7);
    • Invoice date: Tuesday, May 29th (day 12).
      Monthly settlement cycle

      The settlement invoice follows our standards monthly settlement cycle, which means that all transactions processed from July 1st to July 31st period, and settled to Nuvei (before and after July 31st) are invoiced and settled to your account between August 20 – 25th:

    • Transactions period: July 1st, 2018 00:00 UTC (day 1) – July 31st, 2018 23:59 UTC (last day of the month);
    • Invoice date: August 20 – 25th.

    Below there are examples of Settlement invoice reports in all supported formats:

    The XLS and PDF files are sent by e-mail to a group of people in your organization. Please send an e-mail to technicalsupport-s2p@nuvei.com and inform which people should be receiving this e-mail.

      The XLS file of each settlement invoice contains details about the successful transactions invoiced per payment method and per SiteID, the fees applied per payment method for each SiteID and the general Nuvei account fees. The information appears on separate sheets, as follows:

    • SettlementInvoice = a summary of all information listed in the settlement invoice;
    • Payments = total gross amounts (transactions) you processed via different payment methods and total refunds;
    • Transaction Fees = the fees charged for transactions processed  (according to the signed agreement);
    • Different sheets with transactions processed via a specific payment method (one for each). All payment methods sheets contain certain details per transaction to reconcile them with your system (e.g. PaymentID, InputDateTime, Amount, Currency, Status, Exchange rate, Amount in EUR).
    • Enquiries|Refunds|Reversed|CFTs = details about refunds, payment enquiries, chargebacks, etc.
    • Preapprovals|Mandates = details about preapprovals and mandates.

    The CSV files are uploaded on an SFTP server where you can download them from and process them automatically. Please request login details from technicalsupport-s2p@nuvei.com.

    1 Settlement invoice report

    The Settlement invoice report file contains the following fields:

    • GPaymentId
      GPaymentId
      Definition
      The ID of the payment in Europay system (can be empty if you are using GlobalPay).
      Type
      int
      – ID of the payment in Europay system (can be empty if you are using GlobalPay);
    • PaymentId
      PaymentId
      Definition
      GlobalPay transaction ID, a unique number that identifies the transaction in the GlobalPay system.
      Type
      int
      Regex
      ^\d{1,12}$
      – ID of the payment in GlobalPay system;
    • Type
      Type
      Definition
      Describes the entry type:
      - Entries depending on a transaction (row has GPaymentID and/or PaymentID): Payment, Refund, Chargeback, Chargeback Reversal, Enquiry;
      - Generic entries: Monthly fee, Account Setup Fee, Account Opening Fee, Account Closing Fee, Account and Transactions Fee VAT, Repatriation Fee, IOF, etc.;
      Type
      string
      – Describes the entry type:
      1. Entries depending on a transaction (row has GPaymentID and/or PaymentID): Payment, Refund, Chargeback, Chargeback Reversal, Enquiry;
      2. Generic entries: Monthly fee, Account Setup Fee, Account Opening Fee, Account Closing Fee, Account and Transactions Fee VAT, Repatriation Fee, IOF, etc.;
    • PaymentMethodName
      PaymentMethodName
      Definition
      The name of the payment method used for the current transaction.
      Type
      string
      – The name of the payment method used for current transaction;
    • CustomerName
      CustomerName
      Definition
      When available, the Customer Name is being displayed in this field.
      Type
      string
      – When available, the Customer Name is being displayed in this field;
    • MerchantName
      MerchantName
      Definition
      Your merchant alias in our system.
      Type
      string
      – Your merchant alias in our system;
    • MerchantId
      MerchantId
      Definition
      Your Merchant Transaction ID – can be used for reconciliation.
      Type
      string
      – Your Merchant Transaction ID – can be used for reconciliation;
    • GtId
      GtId
      Definition
      Oobsolete ID that is not used anymore
      – obsolete ID that is not used anymore;
    • IssuerName
      IssuerName
      Definition
      When available, this field contains the name of the buyer bank.
      Type
      string
      – When available, this field contains the name of the buyer bank;
    • IdealTrxId
      IdealTrxId
      Definition
      For iDeal transactions only, it contains the ID of the transaction from the provider.
      Type
      int
      – For iDeal transactions only, it contains the ID of the transaction from the provider;
    • Country
      Country
      Definition
      Customer‘s country. Format is according to ISO-3166-1 alpha-2, a two-letter code.
      Type
      string
      Regex
      ^[a-zA-Z]{2}$
      – When available, it containts the customer billing country;
    • InputDateTime
      InputDateTime
      Definition
      The data and time when the transaction was initiated in our system (UTC).
      Type
      datetime
      – The data and time when the transaction was initiated in our system (UTC);
    • Amount
      Amount
      Definition
      The amount of the transaction in the currency in which the transaction was initiated
      Type
      int
      Regex
      ^\d{1,12}$
      – The amount of the transaction in the currency in which the transaction was initiated;
    • Currency
      Currency
      Definition
      The currency in which the transaction was initiated. Format is according to ISO 4217, a three-letter code.
      Type
      string
      Regex
      ^[A-Z]{3}$
      – The currency in which the transaction was initiated;
    • Status
      Status
      Definition
      The status of the transaction. Can be one of: Open, Success, Captured, Paid, Partially Captured, Failed, Cancelled, Expired, Dispute Lost, Dispute Won.
      Type
      string
      – The status of the transaction. Can be one of: Open, Success, Captured, Paid, Partially Captured, Failed, Cancelled, Expired, Dispute Lost, Dispute Won.
    • ExchangeRate
      ExchangeRate
      Definition
      The exchange rate used to convert from Currency to Settlement Currency (Reference Currency).
      – The exchange rate used to convert from Currency to Settlement Currency (Reference Currency);
    • CalculatedAmount
      CalculatedAmount
      Definition
      The amount of the transaction in the Settlement Currency (Reference Currency).
      Type
      int
      Regex
      ^\d{1,12}$
      – The amount of the transaction in the Settlement Currency (Reference Currency);
    • ReferenceCurrency
      ReferenceCurrency
      Definition
      Your settlement currency for the current transaction. Format is according to ISO 4217, a three-letter code.
      Type
      string
      Regex
      ^[A-Z]{3}$
      – Your settlement currency for the current transaction;
    • PaymentMethodFee
      PaymentMethodFee
      Definition
      The payment method fee charged for the current transaction.
      – The payment method fee charged for the current transaction;
    • TransactionFeePerSuccess
      TransactionFeePerSuccess
      Definition
      The transaction fee that is applied for successful transactions (completed).
      – The transaction fee that is applied for successful transactions (completed);
    • TransactionFeePerAttempt
      TransactionFeePerAttempt
      Definition
      The transaction fee that is applied for each successful and unsuccessful transaction processed through Smart2Pay.
      – The transaction fee that is applied for each successful and unsuccessful transaction processed through Smart2Pay;
    • IssuedFee
      IssuedFee
      Definition
      An additional transaction fee used for specific payment methods
      – An additional transaction fee used for specific payment methods;
    • LocalVatFee
      LocalVatFee
      Definition
      The local value-added tax (VAT) applied for Payment Method Fee and/or for transaction’s value for specific countries, depending on the case.
      – The local value-added tax (VAT) applied for Payment Method Fee and/or for transaction’s value for specific countries, depending on the case;
    • VAT
      VAT
      Definition
      Value-added tax (VAT) charged by Smart2Pay for PaymentMethodFee, TransactionFeePerSuccess, TransactionFeePerAttempt and Account Fees according to EU Vat regulations if necessary – field currently not used, but the information is available as additional rows at the bottom of the file.
      – Value-added tax (VAT) charged by Nuvei for PaymentMethodFee, TransactionFeePerSuccess, TransactionFeePerAttempt and Account Fees according to EU Vat regulations if necessary – field currently not used, but the information is available as additional rows at the bottom of the file;
    • InvoiceNumber
      InvoiceNumber
      Definition
      The number of the invoice
      – The number of the invoice;
    • InvoiceDate
      InvoiceDate
      Definition
      The date the invoice was issued
      Type
      datetime
      – The date the invoice was issued.
    • SpecificDetails
      SpecificDetails
      Definition
      Specific details provided.
      Type
      string
      – Specific details provided;

    Transactional reports

    The transactional reports generated can be uploaded periodically on our SFTP server where you can download them from and process them automatically. Please request login details from technicalsupport-s2p@nuvei.com.

    The transactional reports are available in CSV format. By default these reports are generated every Friday (weekly) but upon request the frequency can be changed to daily.

    Below there are examples of transactional reports in CSV format:

    1. All transactions initiated, no matter the status of the payment: MerchantDemo_ATTEMPTS_2018_07_07;The generated transactional report contains transactions with all the statuses we process for your merchant account.
    2. The transactions with Success status: MerchantDemo_SUCCESS_2018_07_07;In case a transaction was exported with a status (any status except Success), but at a later time the status changed to Success (and only Success), GlobalPay will notify again the payment with the success status and the payment will be exported in a separate report (the format is the same) and the report filename ends in “_success”.1 Transactional report</p

      The transactional report file with Success transactions contains the following information:

      Id
      Id
      Definition
      GlobalPay transaction ID, a unique number that identifies the transaction in the GlobalPay system.
      Type
      int
      Regex
      ^\d{1,12}$
      – GlobalPay transaction ID, a unique number that identifies the transaction in the GlobalPay system;

      MerchantTransactionID
      MerchantTransactionID
      Definition
      Merchant Transaction ID, a number that uniquely identifies a transaction in your system.
      Type
      string
      Regex
      ^[0-9a-zA-Z_-]{1,50}$
      – Merchant Transaction ID, a number that uniquely identifies a transaction in your system;

      InputDateTime
      InputDateTime
      Definition
      Date and time when the transaction was created in GlobalPay system.
      Type
      datetime
      – Date and time when the transaction was created in GlobalPay system;

      Status
      Status
      Definition
      The status of the transaction. It can have the following values: Open, Success, Cancelled, Failed, Expired, Authorized.
      Type
      string
      – The status of the transaction. It can have the following values: Open, Success, Cancelled, Failed, Expired, Authorized;

      MerchantAmount
      MerchantAmount
      Definition
      The amount of the transaction.
      Type
      int
      Regex
      ^\d{1,12}$
      – The amount of the transaction;

      MerchantCurrency
      MerchantCurrency
      Definition
      The currency in which the transaction was initiated. Format is according to ISO 4217, a three-letter code.
      Type
      string
      Regex
      ^[A-Z]{3}$
      – The currency in which the transaction was initiated;

      MethodID
      MethodID
      Definition
      The ID of the payment method.
      Type
      int
      Regex
      ^([0-9]{1,10})$
      – The ID of the payment method;

      ReportedByBOTOperatorDate
      ReportedByBOTOperatorDate
      Definition
      The date when the transaction was exported in a SFTP/CSV file.
      Type
      datetime
      – The date when the transaction was exported in a SFTP/CSV file;

      CapturedAmount
      CapturedAmount
      Definition
      The payment‘s captured amount.
      Type
      int
      Regex
      ^\d{1,12}$
      – The payment‘s captured amount;

      MethodName
      MethodName
      Definition
      The name of the payment method used.
      Type
      string
      – The name of the payment method used;

      PaymentStateDefID
      PaymentStateDefID
      Definition
      The ID of the payment status. It can have the following values: 1 - Open, 2 - Success, 3 - Cancelled, 4 - Failed, 5 - Expired, 9 - Authorized.
      Type
      int
      – The ID of the payment status;

      SpecificDetails
      SpecificDetails
      Definition
      Specific details provided.
      Type
      string
      – Specific details provided;

      ReconciliationProviderID
      ReconciliationProviderID
      Definition
      A payment identification ID used at the provider’s end.
      Type
      int
      – A payment identification ID used at the provider’s end;

      ProviderTransactionID
      ProviderTransactionID
      Definition
      Internal ID used for payment notification within our system.
      Type
      int
      – Internal ID used for payment notification within our system;

      MerchantAlias
      MerchantAlias
      Definition
      Your merchant alias in our system.
      Type
      string
      – Your merchant alias in our system;

      MerchantSiteID
      MerchantSiteID
      Definition
      GlobalPay website ID, a unique number that identifies the website in the GlobalPay system.
      Type
      int
      Regex
      ^\d{1,12}$
      – The ID of your site in our system;

      MerchantSiteAlias
      MerchantSiteAlias
      Definition
      Site alias, an alternative name that identifies the website in the GlobalPay system.
      Type
      string
      Regex
      ^.{1,255}$
      – Your site alias in our system;

      RootProviderTransactionID
      RootProviderTransactionID
      Definition
      The transaction ID from the provider.
      Type
      int
      – The transaction ID from the provider;

      Country
      Country
      Definition
      Customer‘s country. Format is according to ISO-3166-1 alpha-2, a two-letter code.
      Type
      string
      Regex
      ^[a-zA-Z]{2}$
      – When available, it containts the customer billing country.
    3.  

    4. The list of refunds: MerchantDemo_REFUNDS_2018_07_07;1 Refunds report

      The refunds report file contains the following information:

      Id
      Id
      Definition
      GlobalPay Refund ID, a unique number that identifies the refund in the GlobalPay system
      Type
      int
      Regex
      ^\d{1,12}$
      – GlobalPay Refund ID, a unique number that identifies the refund in the GlobalPay system;

      RefundRequestDate
      RefundRequestDate
      Definition
      Date and time when the refund was created in GlobalPay system
      Type
      datetime
       – Date and time when the refund was created in GlobalPay system;

      EntryDate
      EntryDate
      Definition
      Date and time when the refund was created in GlobalPay system
      Type
      datetime
       – Date and time when the refund was created in GlobalPay system;

      MethodName
      MethodName
      Definition
      The name of the payment method used
      Type
      string
       – The name of the payment method used;

      Customer
      Customer
      Definition
      When available, the Customer Name is being displayed in this field
       – When available, the Customer Name is being displayed in this field;

      MerchantTransactionID
      MerchantTransactionID
      Definition
      Merchant Transaction ID, a number that uniquely identifies a transaction in your system
       – Your Merchant Transaction ID – can be used for reconciliation;

      Amount
      Amount
      Definition
      The amount of the refund in the currency in which the refund was initiated
       – The amount of the refund in the currency in which the refund was initiated;

      Currency
      Currency
      Definition
      The currency in which the refund was initiated
       – The currency in which the refund was initiated;

      ToBeInvoiced
      ToBeInvoiced
      Definition
      if a fee is applied against the refund or not
       – if a fee is applied against the refund or not;

      PaymentID
      PaymentID
      Definition
      ID of the initial payment for which the refund was made
       – ID of the initial payment for which the refund was made;

      TrxDate
      TrxDate
      Definition
      The data and time when the initial transaction was initiated in our system (UTC)
       – The data and time when the initial transaction was initiated in our system (UTC);

      OtherDetails
      OtherDetails
      Definition
      Any other additional information
      ;

      Merchant
      Merchant
      Definition
      Your merchant alias in our system
      Type
      string
       – Your merchant alias in our system;

      SiteID
      SiteID
      Definition
      GlobalPay website ID, a unique number that identifies the website in the GlobalPay system.
      Type
      int
      Regex
      ^\d{1,12}$
       – The ID of your site in our system;

      RefundType
      RefundType
      Definition
      The type of refund: Native, SEPABankTransfer, SWIFTBankTransfer, ManualSupportWorkNoInfo, SEPABankTransferNoInfo, SWIFTBankTransferNoInfo, LocalBankTransfer, LocalBankTransferNoInfo, ManualSupportWorkDetailsNeeded, LocalBankTransfer2API
       – the type of refund: https://docs-apm.nuvei.com/category/refunds-api/refund-types/;

      PayerEntity
      PayerEntity
      Definition
      The source of the refund entity (usually Smart2Pay entity)
       – the source of the refund entity (usually Nuvei entity);

      PayerAccount
      PayerAccount
      Definition
      Smart2Pay Account, when applicable
       – Nuvei Account, when applicable;

      PayerBIC
      PayerBIC
      Definition
      Smart2Pay BIC, when applicable
       – Nuvei BIC, when applicable;

      Country
      Country
      Definition
      Customer‘s country. Format is according to ISO-3166-1 alpha-2, a two-letter code.
      Type
      string
      Regex
      ^[a-zA-Z]{2}$
       – When available, it contains the customer billing country;

      ReconciliationProviderID
      ReconciliationProviderID
      Definition
      A payment identification ID used at the provider’s end
       – The transaction ID from the provider.
    5.  

    6. The list of refunds for SmartCards payment method: MerchantDemo_SMARTCARDS_REFUNDS_2018_07_07.

      1 SmartCards Refunds report

      The SmartCards refunds report file contains the following information:

      ID
      ID
      Definition
      A unique number that identifies the refund in the Smartcards system
      Type
      int
      Regex
      ^\d{1,12}$
       – a unique number that identifies the refund in the Smartcards system;

      MerchantAlias
      MerchantAlias
      Definition
      Your merchant alias in our system
      Type
      string
       – Your merchant alias in our system;

      MerchantSiteAlias
      MerchantSiteAlias
      Definition
      Your site alias in our system
      Type
      string
       – Your site alias in our system;

      MerchantSiteID
      MerchantSiteID
      Definition
      The ID of your site in our system
      Type
      string
       – The ID of your site in our system;

      MerchantTransactionID
      MerchantTransactionID
      Definition
      Merchant Transaction ID, a number that uniquely identifies a transaction in your system.
      Type
      string
      Regex
      ^[0-9a-zA-Z_-]{1,50}$
       – Merchant Transaction ID, a number that uniquely identifies a transaction in your system;

      InputDateTime
      InputDateTime
      Definition
      Date and time when the transaction was created in GlobalPay system.
      Type
      datetime
       – Date and time when the refund was created in the Smartcards system;

      InitialPaymentID
      InitialPaymentID
      Definition
      ID of the initial payment for which the refund was made
       – ID of the initial payment for which the refund was made;

      MerchantAmount
      MerchantAmount
      Definition
      The amount of the refund
       – The amount of the refund;

      MerchantCurrency
      MerchantCurrency
      Definition
      The currency in which the refund was initiated
       – The currency in which the refund was initiated;

      Status
      Status
      Definition
      The status of the refund. It can have the following values: Open, Success, Failed.
      Type
      int
       – The status of the refund. It can have the following values: Open, Success, Failed;

      MethodName
      MethodName
      Definition
      The name of the payment method used
       – The name of the payment method used;

      ProviderTransactionID
      ProviderTransactionID
      Definition
      Internal ID used for payment notification within our system.
      Type
      int
       – The transaction ID from the provider;

      RefundType
      RefundType
      Definition
      The type of refund: Native - is the only one available at the moment
       – the types of refund: https://docs-apm.nuvei.com/category/refunds-api/refund-types/;

      ReportedByBOTOperatorDate
      ReportedByBOTOperatorDate
      Definition
      The date when the transaction was exported in a SFTP/CSV file
      Type
      datetime
       – The date when the transaction is exported in a SFTP/CSV file;

      Bookdate
      Bookdate
      Definition
      Bookdate
       – The date when the transaction is reported by the bank.

    Dashboard reports

    The Dashboard reports contain a complete list of all the transactions made with the payment methods assigned to your merchant account. You have the possibility to search for specific payments using different criteria, to see the details of the payment invoice and fees, and to export your payments into an XLS file. These reports can be exported from GlobalPay Dashboard.

    For more information regarding Dashboard reports, please visit our dedicated section: GlobalPay Merchant Dashboard.

    MTN (Zambia) Test Data

    In order for you to test MTN payment method available in Zambia, please use the below test data.

    MTN (Zambia) Test Data
    Data Value
    Phone 260214002248

    MTN (Zambia) Payment Flow

      1. The customer fills in the Phone number.1 Payment instructions
      2. The customer receives the details needed to complete the payment.1 Payment instructions

    1. The customer dials *303# to access the MTN Mobile Money menu.1 Payment instructions
    2. The customer selects Pay Bill option from the menu.1 Payment instructions
    3. The customer selects Goods and Services option from the menu.1 Payment instructions
    4. The customer enters the merchant ID. For test purposes, please use: 3GDP.1 Payment instructions
    5. The customer enters the amount.1 Payment instructions
    6. The customer enters the payment reference number. For test purposes, please use: 8417CE8C.1 Payment instructions
    7. The customer enters the PIN to complete the payment and receives a message that the payment was successful.1 Payment instructions

    MTN (Rwanda) Test Data

    For MTN payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    MTN (Rwanda) Payment Flow

    1. The customer fills in the Phone number.1 Payment instructions
    2. The customer receives the details needed to complete the payment.1 Payment instructions
    3. The customer receives a mobile request to complete the payment. He has to select the transaction with the amount in RWF currency.1 Payment instructions
    4. The customer accepts or rejects the payment.1 Payment instructions
    5. The customer enters the mobile money PIN to complete the payment. He will receive an SMS confirmation of the transaction from MTN.1 Payment instructions

    M-Pesa (Tanzania) – Test Data

    In order for you to test M-Pesa payment method available in Tanzania, please use the below test data.

    M-Pesa (Tanzania) Test Data
    Data Value
    Phone 255653560949

    M-Pesa (Tanzania) Payment Flow

    1. The customer fills in the Phone number.

      1 Payment instructions

    2. The customer receives the details needed to complete the payment.

      1 Payment instructions

    3. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    Tigo Test Data

    For Tigo payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Tigo Payment Flow

    1. The customer fills in the Phone number.

      1 Payment instructions

    2. The customer receives the details needed to complete the payment.

      1 Payment instructions

    3. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    MTN Test Data

    In order for you to test MTN payment method available in Uganda, please use the below test data.

    MTN Test Data
    Data Value
    Phone 256387676229

    For MTN payment method available in Rwanda and Zambia, you can see how it works with the payment flows given here: MTN (Rwanda) Payment Flow and MTN (Zambia) Payment Flow.

    MTN (Unganda) Payment Flow

      1. The customer fills in the Phone number.1 Payment instructions
      2. The customer receives the details needed to complete the payment.1 Payment instructions

    1. The customer dials *165# and selects from the menu the Payments option.1 Payment instructions
    2. The customer enters 3G as the Merchant Code.1 Payment instructions
    3. The customer enters the payment reference number. For test purposes, please use: 8412BA96.1 Payment instructions
    4. The customer enters the amount.1 Payment instructions
    5. The customer sees the payment details and enters the PIN to complete the payment.1 Payment instructions

    Airtel Money Test Data

    In order for you to test Airtel Money payment method available in Tanzania, please use the below test data.

    Airtel Money (Tanzania) Test Data
    Data Value
    Phone 255737306783

    For Airtel Money payment method available in Kenya, you can see how it works with the payment flow given here: Airtel Money (Kenya) Payment Flow (2).

    Airtel Money (Tanzania) Payment Flow

    1. The customer fills in his phone number.

      1 Payment instructions

    2. The customer receives the details needed to complete the payment.

      1 Payment instructions

    3. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    M-Pesa Test Data

    In order for you to test M-Pesa payment method, please use the below test data.

    M-Pesa Test Data
    Data Value
    Phone 254716737623

    For M-Pesa payment method available in Tanzania, you can see how it works with the payment flow given here: M-Pesa (Tanzania) – DirectPay Payment Flow.

    M-Pesa (Kenya) Payment Flow

    1. The customer fills in the Phone number.1 Payment instructions
    2. The customer receives the details needed to complete the payment.1 Payment instructions
    3. The customer receives a push notification to his mobile and confirms the payment.1 Payment instructions
    • In case the customer has not received the M-Pesa prompt on his phone, there is another possibility to complete a M-Pesa payment flow by following the instructions:
    1. The customer opens the SIM Tool Kit and selects “M-Pesa” menu.1 Payment instructions
    2. The customer selects “Lipa na M-Pesa”.1 Payment instructions
    3. The customer selects the “Pay Bill” option.1 Payment instructions
    4. The customer enters his business number.1 Payment instructions
    5. The customer enters his account number.1 Payment instructions
    6. The customer needs to enter the amount.1 Payment instructions
    7. The customer needs to enter his M-Pesa PIN number and press “OK” button to complete the payment.1 Payment instructions
    8. The customer receives the payment details. If the details are correct he needs to press “OK” button to confirm the payment.1 Payment instructions

    Ininal Test Data

    For Ininal payment method test data is available on demand. Please contact our support department at technicalsupport-s2p@nuvei.com for more information.

    Ininal Payment Flow

    1. The customer enters his phone number and his email address.1 Enter customer details
    2. The customer receives a 6-digit verification code at the phone number that he previously added. He needs to enter the 6-digit code and click the Confirm button.1 SMS Verification
    3. The Customer enters his Ininal card information and confirms the payment.1 Payment confirmation
    4. Upon completion of the payment flow, the customer is redirected to your ReturnUrl.1 Return page when the redirection status is a success

    Cards Turkey Test Data

    For Cards Turkey payment method test data is available on demand. Please contact our support department at technicalsupport-s2p@nuvei.com for more information.

    Cards Turkey Payment Flow

    1. The customer enters his phone number and his email address.1 Enter customer details
    2. The customer receives a 6-digit verification code at the phone number that he previously added. He needs to enter the 6-digit code and click the Confirm button.1 SMS Verification
    3. The Customer enters his credit card details and confirms the payment.1 Payment confirmation
    4. Upon completion of the payment flow, the customer is redirected to your ReturnUrl.1 Return page when the redirection status is a success

    BKM Express Test Data

    For BKM Express payment method test data is available on demand. Please contact our support department at technicalsupport-s2p@nuvei.com for more information.

    BKM Express Payment Flow

    1. The customer enters his phone number and his email address.1 Enter customer details
    2. The customer receives a 6-digit verification code at the phone number that he previously added. He needs to enter the 6-digit code and click the Confirm button.1 SMS Verification
    3. The Customer logs in to his BKM Express account with his email address and password.1 Account login
    4. The customer verifies the payment information and the user details and completes the transaction by clicking on the Perform Payment button.1 Perform payment
    5. Upon completion of the payment flow, the customer is redirected to your ReturnUrl.1 Return page when the redirection status is a success

    Bank Transfer Turkey Test Data

    For Bank Transfer Turkey payment method test data is available on demand. Please contact our support department at technicalsupport-s2p@nuvei.com for more information.

    Bank Transfer Turkey Payment Flow

    1. The customer enters his phone number and his email address.1 Enter customer details
    2. The customer chooses the desired bank from the list provided.1 SMS Verification
    3. The customer enters his phone number and the verification code and clicks on the Approve button.1 SMS Verification
    4. The customer will receive a message that the bank information were sent to his mobile phone via sms. He just needs to write his GPM registered mobile phone to explain his payment.1 Perform payment

    Yandex.Money Refund Request (Fiscalization)

    This setup is required for the Merchants that decide to setup the interaction with their online sales register via Yandex.Checkout.

    For Yandex.Money the refunds can be full and/or partial depending if you have to return all the money to customer or not. A particular case is for Partial refund as you will need to provide additional parameters.

    Below there are two examples of a refund request: one for a full refund, where no additional parameters are needed and one for a partial refund, where additional parameters are needed.

    Definition: POST /v1/payments/{id}/refunds

    Where:
    • {id} – GlobalPay Payment ID

    A 201 HTTP response (Created) is returned if the refund was correctly initialized.

    Full refund means you can only refund the entire paid amount for the initial transaction. For full refund you only need to send the Amount parameter, like in the below example:

    Request:

    POST https://paytest.smart2pay.com/v1/payments/3005389123/refunds
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Refund": {
        "MerchantTransactionID": "s2ptest_g28_b",
        "Amount": 100
       }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
      "Refund": {
        "ID": 1640512,
        "Created": "20170803095139",
        "MerchantTransactionID": "s2ptest_g28_b",
        "OriginatorTransactionID": null,
        "InitialPaymentID": 3005389123,
        "Amount": "100",
        "Currency": "EUR",
        "Description": null,
        "TypeID": 5,
        "SiteID": 30201,
        "Details": null,
        "Customer": null,
        "BillingAddress": null,
        "BankAddress": null,
        "Articles": null,
        "Status": {
          "ID": 1,
          "Info": "Open",
          "Reasons": null
        }
      }
    }

    For Yandex.Money a particular case is for Partial refund as you will need to provide the below additional parameters in request: Merchant Article ID and Quantity, like in the below example:

    Request:

    POST https://paytest.smart2pay.com/v1/payments/3006154123/refunds
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Refund": {
        "MerchantTransactionID": "YandexPartialRefund",
        "Amount": 980,
        "Articles": [
          {
            "MerchantArticleID": "1231",
            "Quantity": 1
          }
        ]
      }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
      "Refund": {
        "ID": 0,
        "Created": null,
        "MerchantTransactionID": "YandexPartialRefund",
        "OriginatorTransactionID": null,
        "InitialPaymentID": 3006154123,
        "Amount": "980",
        "Currency": null,
        "Description": null,
        "TypeID": 0,
        "SiteID": 30201,
        "Details": null,
        "Customer": null,
        "BillingAddress": null,
        "BankAddress": null,
        "Articles": [
          {
            "MerchantArticleID": "1231",
            "Name": null,
            "Quantity": 1,
            "Price": 0,
            "VAT": 0,
            "Discount": 0,
            "Type": null,
            "DiscountValue": 0
          }
        ],
        "Status": {
          "ID": 1,
          "Info": "Open",
          "Reasons": null
        }
      }
    }

    Cards Russia Refund Request (Fiscalization)

    This setup is required for the Merchants that decide to setup the interaction with their online sales register via Yandex.Checkout.

    For Cards Russia the refunds can be full and/or partial depending if you have to return all the money to customer or not. A particular case is for Partial refund as you will need to provide additional parameters.

    Below there are two examples of a refund request: one for a full refund, where no additional parameters are needed and one for a partial refund, where additional parameters are needed.

    Definition: POST /v1/payments/{id}/refunds

    Where:
    • {id} – GlobalPay Payment ID

    A 201 HTTP response (Created) is returned if the refund was correctly initialized.

    Full refund means you can only refund the entire paid amount for the initial transaction. For full refund you only need to send the Amount parameter, like in the below example:

    Request:

    POST https://paytest.smart2pay.com/v1/payments/300538912/refunds
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Refund": {
        "MerchantTransactionID": "s2ptest_g28_a",
        "Amount": 100
       }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
      "Refund": {
        "ID": 16405,
        "Created": "20170803095139",
        "MerchantTransactionID": "s2ptest_g28_a",
        "OriginatorTransactionID": null,
        "InitialPaymentID": 300538912,
        "Amount": "100",
        "Currency": "EUR",
        "Description": null,
        "TypeID": 5,
        "SiteID": 30201,
        "Details": null,
        "Customer": null,
        "BillingAddress": null,
        "BankAddress": null,
        "Articles": null,
        "Status": {
          "ID": 1,
          "Info": "Open",
          "Reasons": null
        }
      }
    }

    For Cards Russia a particular case is for Partial refund as you will need to provide the below additional parameters in request: Merchant Article ID and Quantity, like in the below example:

    Request:

    POST https://paytest.smart2pay.com/v1/payments/3006154/refunds
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Refund": {
        "MerchantTransactionID": "YandexPartialRefund",
        "Amount": 980,
        "Articles": [
          {
            "MerchantArticleID": "1231",
            "Quantity": 1
          }
        ]
      }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
      "Refund": {
        "ID": 0,
        "Created": null,
        "MerchantTransactionID": "YandexPartialRefund",
        "OriginatorTransactionID": null,
        "InitialPaymentID": 3006154,
        "Amount": "980",
        "Currency": null,
        "Description": null,
        "TypeID": 0,
        "SiteID": 30201,
        "Details": null,
        "Customer": null,
        "BillingAddress": null,
        "BankAddress": null,
        "Articles": [
          {
            "MerchantArticleID": "1231",
            "Name": null,
            "Quantity": 1,
            "Price": 0,
            "VAT": 0,
            "Discount": 0,
            "Type": null,
            "DiscountValue": 0
          }
        ],
        "Status": {
          "ID": 1,
          "Info": "Open",
          "Reasons": null
        }
      }
    }

    Cards Russia Payment Request (Fiscalization)

    This setup is required for the Merchants that decide to setup the interaction with their online sales register via Yandex.Checkout.

    In order to be compliant with Federal Law No. 54, Russian companies have to transmit fiscal data: product names and prices, VAT rate/tax system to the tax service. Therefore, it is mandatory to send in request the list of articles with all the details (including data regarding tax type).

    Below you will find a full example of a one-off payment request for Cards Russia payment method (with Success and Bad response). The parameters of the payment are sent in the message body as a JSON object. For Cards Russia the Articles parameters are mandatory to be sent in the initial payment request. Country and Customer parameters are not mandatory, however it is highly recommended to be sent.

    A 201 HTTP response (Created) is returned if the payment was correctly initialized.

    For more information about status codes, please go to Basic HTTP Status Codes.

    Request: 

    POST https://paytest.smart2pay.com/v1/payments
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Payment": {
          "Amount": 1000,
          "Currency": "RUB",
          "Description": "test smart2pay",
          "MethodID": 1045,
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "MerchantTransactionID": "payment7598JKLHJKkh",
          "Articles": [
            {
            "MerchantArticleID": "1231",
            "Name": "TEST",
            "Quantity": 1,
            "Price": 1000,
            "TaxType": 1
          }
          ],
          "BillingAddress": {
            "Country": "RU"
            },
          "Customer": {
            "Email": "youremail@email.com"   
          },
          "TokenLifetime": 10
       }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
      "Payment": {
        "ID": 3924599,
        "SkinID": null,
        "ClientIP": null,
        "Created": "20180629123902",
        "MerchantTransactionID": "payment7598JKLHJKkh",
        "OriginatorTransactionID": null,
        "Amount": "1000",
        "Currency": "RUB",
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "test smart2pay",
        "MethodID": 1045,
        "MethodOptionID": null,
        "IncludeMethodIDs": null,
        "ExcludeMethodIDs": null,
        "PrioritizeMethodIDs": null,
        "SiteID": 41358,
        "NotificationDateTime": null,
        "Customer": {
          "ID": 93089,
          "MerchantCustomerID": null,
          "Email": "youremail@email.com",
          "FirstName": null,
          "LastName": null,
          "Gender": null,
          "SocialSecurityNumber": null,
          "SocialSecurityNumber2": null,
          "Phone": null,
          "Company": null,
          "DateOfBirth": null
          },
        "BillingAddress": {
          "ID": 4421,
          "City": null,
          "ZipCode": null,
          "State": null,
          "Street": null,
          "StreetNumber": null,
          "HouseNumber": null,
          "HouseExtension": null,
          "Country": "RU"
          },
        "ShippingAddress": null,
        "Articles": [
          {
          "MerchantArticleID": "1231",
          "Name": "TEST",
          "Quantity": 1,
          "Price": "1000",
          "VAT": "1000",
          "Discount": "0",
          "Type": "1",
          "TaxType": 1,
          "DiscountValue": "0"
          }
          ],
        "Details": null,
        "ReferenceDetails": null,
        "CustomParameters": null,
        "PreapprovalID": null,
        "Status": {
          "ID": 1,
          "Info": "Open",
          "Reasons": null
          },
        "MethodTransactionID": null,
        "TokenLifetime": 10,
        "Capture": null,
        "PreapprovalDetails": null,
        "RedirectURL": "https://apitest.smart2pay.com/Home?PaymentToken=C15BD127DDA0599F743C72462BA9BC08.3924599"
        }
    }

    Yandex.Money Payment Request (Fiscalization)

    This setup is required for the Merchants that decide to setup the interaction with their online sales register via Yandex.Checkout.

    In order to be compliant with Federal Law No. 54, Russian companies have to transmit fiscal data: product names and prices, VAT rate/tax system to the tax service. Therefore, it is mandatory to send in request the list of articles with all the details (including data regarding tax type).

    Below you will find a full example of a one-off payment request for Yandex.Money payment method (with Success and Bad response). The parameters of the payment are sent in the message body as a JSON object. For Yandex.Money the Articles parameters are mandatory to be sent in the initial payment request. Country and Customer parameters are not mandatory, however it is highly recommended to be sent.

    A 201 HTTP response (Created) is returned if the payment was correctly initialized.

    For more information about status codes, please go to Basic HTTP Status Codes.

    Request: 

    POST https://paytest.smart2pay.com/v1/payments
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
    
    {
      "Payment": {
          "Amount": 1000,
          "Currency": "RUB",
          "Description": "test smart2pay",
          "MethodID": 1045,
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "MerchantTransactionID": "payment7598JKLHJKkh",
          "Articles": [
            {
            "MerchantArticleID": "1231",
            "Name": "TEST",
            "Quantity": 1,
            "Price": 1000,
            "TaxType": 1
          }
          ],
          "BillingAddress": {
            "Country": "RU"
            },
          "Customer": {
            "Email": "youremail@email.com"   
          },
          "TokenLifetime": 10
       }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
      "Payment": {
        "ID": 3924599,
        "SkinID": null,
        "ClientIP": null,
        "Created": "20180629123902",
        "MerchantTransactionID": "payment7598JKLHJKkh",
        "OriginatorTransactionID": null,
        "Amount": "1000",
        "Currency": "RUB",
        "CapturedAmount": null,
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "test smart2pay",
        "MethodID": 1045,
        "MethodOptionID": null,
        "IncludeMethodIDs": null,
        "ExcludeMethodIDs": null,
        "PrioritizeMethodIDs": null,
        "SiteID": 41358,
        "NotificationDateTime": null,
        "Customer": {
          "ID": 93089,
          "MerchantCustomerID": null,
          "Email": "youremail@email.com",
          "FirstName": null,
          "LastName": null,
          "Gender": null,
          "SocialSecurityNumber": null,
          "SocialSecurityNumber2": null,
          "Phone": null,
          "Company": null,
          "DateOfBirth": null
          },
        "BillingAddress": {
          "ID": 4421,
          "City": null,
          "ZipCode": null,
          "State": null,
          "Street": null,
          "StreetNumber": null,
          "HouseNumber": null,
          "HouseExtension": null,
          "Country": "RU"
          },
        "ShippingAddress": null,
        "Articles": [
          {
          "MerchantArticleID": "1231",
          "Name": "TEST",
          "Quantity": 1,
          "Price": "1000",
          "VAT": "1000",
          "Discount": "0",
          "Type": "1",
          "TaxType": 1,
          "DiscountValue": "0"
          }
          ],
        "Details": null,
        "ReferenceDetails": null,
        "CustomParameters": null,
        "PreapprovalID": null,
        "Status": {
          "ID": 1,
          "Info": "Open",
          "Reasons": null
          },
        "MethodTransactionID": null,
        "TokenLifetime": 10,
        "Capture": null,
        "PreapprovalDetails": null,
        "RedirectURL": "https://apitest.smart2pay.com/Home?PaymentToken=C15BD127DDA0599F743C72462BA9BC08.3924599"
        }
    }

    Online Banking Vietnam Test Data

    For Online Banking Vietnam payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Online Banking Vietnam Payment Flow

    1. The customer enters his Email Address (the below page can be skipped by sending the parameter in the payment request).

      1 Enter Email Address

    2. The customer has to choose his preferred payment option from the given list.

      1 Choose payment option

    3. The customer needs to enter the necessary credit card information: Name of the Cardholder, Card Number and Expiration Date. Then he needs to confirm the payment.

      1 Code via text message

    4. The customer receives a message that the payment was successfully processed.

      1 Payment successfully processed

    5. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    Cards Vietnam Test Data

    For Cards Vietnam payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Cards Vietnam Payment Flow

    1. The customer enters his Email Address (the below page can be skipped by sending the parameter in the payment request).

      1 Enter Email Address

    2. The customer has to choose his preferred payment option from the given list.

      1 Choose card

    3. The customer needs to enter the necessary credit card information and billing information. Then he needs to confirm the payment.

      1 Code via text message

    4. The customer receives a message that the payment was successfully processed.

      1 Payment successfully processed

    5. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    VTC Pay Wallet Test Data

    For VTC Pay Wallet payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    VTC Pay Wallet Payment Flow

    1. The customer enters his Email Address (the below page can be skipped by sending the parameter in the payment request).

      1 Enter Email Address

    2. The customer logs in to his VTC Pay Wallet account by using his account number and password.

      1 Account login

    3. The customer will receive a a code via text message to his phone number which he needs to enter to confirm the payment.

      1 Code via text message

    4. The customer receives a message that the payment was successfully processed.

      1 Payment successfully processed

    5. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    VTC Pay Test Data

    For VTC Pay payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    VTC Pay Payment Flow

    1. The customer enters his Email Address (the below page can be skipped by sending the parameter in the payment request).

      1 Enter Email Address

    2. The customer has to choose his preferred payment method from the list.

      1 Choose payment method

    3. After choosing the payment method the customer logs in to his VTC Pay account by using his account number and password.

      1 Account login

    4. The customer will receive a a code via text message to his phone number which he needs to enter to confirm the payment.

      1 Code via text message

    5. The customer receives a message that the payment was successfully processed.

      1 Payment successfully processed

    6. Upon completion of the payment flow, the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is a success

    Local Bank Transfer 2 API – refund flow

    Full or partials Local Bank Transfer 2 API refunds are made by using Initiate Refund button from Payments tab.

    The Initiate Refund button is displayed only for transactions with status Success.

    50

    A pop-up window with the transaction details will be displayed. The Refund Merchant Transaction ID is automatically generated. You can change this ID by introducing your ID value.

    If you want to perform a full refund you will have to fill Refund Amount with the same amount as Payment Amount.

    In the case you want to perform a partial refund you have to fill the Refund Amount with a smaller amount than the Payment Amount. You can perform more than one refund for a transaction with the limitation that the sum of partial refunds to be smaller or equal than the initial paid amount.

    51

    The refunds for most LATAM payment methods are made by our local provider. In order for the refund to be processed the customer bank details are required and there are 2 possibilities:

    • the Customer bank details are sent in full in the request. In this case, the refund should be processed within 48 hours.

    • the Customer bank details are not sent in request. However, in this case, the local provider will contact the customer in order to obtain the bank details so the refund can be performed.

    The refunds for India payment methods, do not require sending the customer’s bank details at all.

    A confirmation message, that the refund request has been successfully sent, will be displayed:

    52

    You can see the complete list of all of your refunds in the Refunds tab.

    54

    Get the number of installments per country

    You can get information about the number of installments available per country and BIN (Bank Identification Number) by using the following GET HTTP request.

    Definition: GET /v1/installments?country={countryCode}&bin={bin}

    Where:
    • {bin} – The Bank’s Identification Number

    Request:

    GET https://securetest.smart2pay.com/v1/installments?country=AR&bin=512345
    Authorization: Basic MTAxMDpnYWJp

    Response:

    HTTP/1.1 200 OK
    Content-Type: application/json; charset=utf-8
    
    {
      "Country": "AR",
        "BIN": "512345",
        "CardBrand": "MasterCard",
        "CardSubBrand": "MasterCard",
        "Installments": [
        {
          "Number": "3",
          "Rate": "1097"
        },
        {
          "Number": "6",
          "Rate": "1951"
        },
        {
          "Number": "9",
          "Rate": "3146"
        },
        {
          "Number": "12",
          "Rate": "4211"
        }
      ]
    }

    Cancel a Credit Card Token

    Definition: POST /v1/card/token/{value}/cancel

    Where:
    • {value} – the value of the credit card token used for Recurring Payments

    You have the possibility to cancel a credit card token by using the above action.

    A 200 HTTP response (OK) is returned if the request was completed successfully.

    Request:

    POST https://securetest.smart2pay.com/v1/card/token/B531AFAC800FD51A9CCF67D0CC7B24A4/cancel
    Authorization: Basic MTAxMDpnYWJp

    Response:

    HTTP/1.1 200 OK
    Content-Type: application/json; charset=utf-8
    
    {
      "CardAuthentication": { 
        "Card": {
          "HolderName": "John Doe",
          "Number": "VISA-1111",
          "ExpirationMonth": "02",
          "ExpirationYear": "2021",
          "IssuingBankCountry": null
        },
        "CreditCardToken": {
          "Value": "B531AFAC800FD51A9CCF67D0CC7B24A4",
          "Active": "false"
        },
        "Status": {
          "ID": 3,
          "Info": "Canceled",
          "Reasons": []
        }
      }
    }

    Get information on a specific card token

    Definition: GET /v1/card/token/{value}

    Where:
    • {value} – the value of the credit card token used for Recurring Payments

    You can get more information about a specific credit card token by using an action based on GET HTTP request. Please be aware that only a limited amount of details for each token will be provided.

    A 200 HTTP response (OK) is returned if the request was completed successfully.

    Request:

    GET https://securetest.smart2pay.com/v1/card/token/B531AFAC800FD51A9CCF67D0CC7B24A4
    Authorization: Basic MTAxMDpnYWJp

    Response:

    HTTP/1.1 200 OK
    Content-Type: application/json; charset=utf-8
    
    {
      "CardAuthentication": {                 
        "Card": {
          "HolderName": "John Doe",
          "Number": "VISA-1111",
          "ExpirationMonth": "02",
          "ExpirationYear": "2021",
          "IssuingBankCountry": null
        },
        "CreditCardToken": {
          "Value": "B531AFAC800FD51A9CCF67D0CC7B24A4",
          "Active": "true"
        }                            
      }
    }

    Generate a Credit Card Token

    To initiate Recurring Card Payments, you must generate first a credit card token. The credit card token can be obtained in two ways:

    • by initiating a payment request with GenerateCreditCardToken parameter set to true. For more detailed information, please go to our section Recurring Card Payments;
    • by using the following action for Card Authentication based on POST HTTP request:

    Definition: POST /v1/card/authenticate

    By using the Card Authentication request with all the necessary details for customer and for credit card, a token element will be sent in the response, containing the value of the newly created credit card token. The token received in the response can be used to initiate future Recurring Payments.

    Request:

    POST https://securetest.smart2pay.com/v1/card/authenticate
    Authorization: Basic MTAxMDpnYWJp
    
    {
      "CardAuthentication": {
        "Customer": {
          "FirstName": "John",
          "LastName": "Doe",
          "Email": "testing2@test.com",
          "SocialSecurityNumber": "00003456789"
          },
        "BillingAddress": {
          "Country": "BR"
          },
        "Card": {
          "HolderName": "John Doe",
          "Number": "4111111111111111",
          "ExpirationMonth": "02",
          "ExpirationYear": "2021",
          "SecurityCode": "312"
        }
      }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
      "CardAuthentication": {
        "Customer": {
          "ID": 0,
          "MerchantCustomerID": null,
          "Email": "testing2@test.com",
          "FirstName": "John",
          "LastName": "Doe",
          "Gender": null,
          "SocialSecurityNumber": "00003456789",
          "Phone": null,
          "Company": null
          },
        "BillingAddress": {
          "ID": 0,
          "City": null,
          "ZipCode": null,
          "State": null,
          "Street": null,
          "StreetNumber": null,
          "HouseNumber": null,
          "HouseExtension": null,
          "Country": "BR"
          },
        "Card": {
          "HolderName": "John Doe",
          "Number": "VISA-1111",
          "ExpirationMonth": "02",
          "ExpirationYear": "2021",
          "IssuingBankCountry": null
          },
        "CreditCardToken": {
          "Value": "B531AFAC800FD51A9CCF67D0CC7B24A4",
          "Active": "true"
        },
        "Status": {
          "ID": 2,
          "Info": "Success",
          "Reasons": []
        }
      }
    }

    Resilience

    By default the SDK supports Automatic Retries with Exponential Delay and Circuit Breaker.

    The default configuration values for Retry and Circuit Breaker are the following:

    Retry Configuration
    Retry Count 3 Retries 3 times
    DelayExponentialFactor 2 Wait time between retries is Math.Pow(2, retryAttempt)
    Circuit Breaker Configuration
    CircuitBreaker FailureThreshold 0.7 Break on >=70% actions result in handled exception
    SamplingDuration TimeSpan.FromSeconds(60) Over any 60 seconds period
    MinimumThroughput 16 Provided at least 16 actions in the 60 seconds period
    DurationOfBreak TimeSpan.FromSeconds(60) Break for 60 seconds

    If you want to change these values you will have to create your own Resilience configuration reference:

    var configuration = new ResilienceConfiguration
            {
                Retry = new RetryConfiguration
                {
                    Count = 5, // Retries 3 times
                    DelayExponentialFactor = 5 // Wait time between retries is Math.Pow(2, retryAttempt)
                },
                CircuitBreaker = new CircuitBreakerConfiguration
                {
                    FailureThreshold = 0.5, // Break on >=50% actions result in handled exceptions
                    SamplingDuration = TimeSpan.FromSeconds(30), // over any 30 seconds period
                    MinimumThroughput = 10, // provided at least 10 actions in the 30 seconds period.
                    DurationOfBreak = TimeSpan.FromSeconds(90) // Break for 90 seconds.
                }
            };
            };
    
    
    var httpClientBuilder = new HttpClientBuilder(() => AuthenticationConfiguration).WithResilienceConfiguration(configuration);

    Idempotence

    Our API supports idempotence for safely retrying requests and guarantees that the operation is performed only once. For example, if you create a card payment that fails due to a network connection error, you can retry the request with the same idempotence key to guarantee that only a single card payment is created.

    The SDK by default uses Guid.NewGuid().ToString() to generate Unique Keys. We strongly recommend to generate your own Unique Keys using V4 UUIDs or another appropriately random string.

    For card payments we’ll always send back the same response for requests made with the same key, and keys can’t be reused with different request parameters. Keys expire after 24 hours.

    This is how you can plug in your Unique Key Generator:

    var uniqueKeyGenerator = new Func<string>(() => {/* write your custom unique key generator logic and return a string */});
    var httpClientBuilder = new HttpClientBuilder(() => AuthenticationConfiguration).WithIdempotencyKeyGenerator(uniqueKeyGenerator);

    After you perform a Create Payment this is how you can obtain the Unique Key:

    var createPaymentResult = await paymentService.InitiatePaymentAsync(paymentRequest);
    var uniquKey = createPaymentResult.HttpRequest.Headers.GetIdempotencyToken();

    INotificationCallback Interface

    Notification Callback Interface
    Documentation Method
    Alternative Payment Notification Task<bool> AlternativePaymentNotificationCallbackAsync(ApiAlternativePaymentResponse alternativePaymentNotification);
    Card Payment Notification Task<bool> CardPaymentNotificationCallbackAsync(ApiCardPaymentResponse cardPaymentNotification);
    Refund Notification Task<bool> RefundNotificationCallbackAsync(ApiRefundResponse refundNotification);
    Preapproval Notification Task<bool> PreapprovalNotificationCallbackAsync(ApiPreapprovalResponse preapprovalNotification);
    Card Payout Notification Task<bool> CardPayoutNotificationCallbackAsync(ApiCardPayoutResponse cardPayoutNotification);
    Chargebacks API Task<bool> DisputeNotificationCallbackAsync(ApiDisputeResponse disputeNotification);
    Task<bool> InvalidFormatNotificationCallbackAsync(InvalidFormatNotification invalidFormatNotification);
    This callback will be raised if the notification body is not in a correct Json format. You will be able to see the Exception and the Notification Body. We just recommend you to log them and not to implement any logic in this callback.
    Task<bool> UnknownTypeNotificationCallbackAsync(UnknownTypeNotification unknownTypeNotification);
    This callback will be raised if the notification body is in a correct Json format, but we cannot determine the type of notification. We just recommend you to log it and not to implement any logic in this callback.

    Nuvei SDK .NET Notification

    We offer you the possibility to receive notifications for every type of service used. We will notify you about the status changes to the Notification URL you setup in the Merchant Dashboard.

    In order to receive notifications you need to expose REST – endpoint which accepts POSTs.

    You need to implement the INotificationCallback Interface. The interface exposes asynchronous methods that return Task<bool> and uses true/false values to indicate success/failure.

    Please make sure to handle your exceptions; if the SDK catches an exception it will consider that the callback has failed. The SDK will return Http 204 (No content) if the callback succeeds or it will return Http 500 (Internal Server Error) if the callback returns false or if an exception is caught.

    In your POST action handler you will need an reference of INotificationProcessor type, you will need to read the Notification Body as a string and pass that string as an argument to ProcessNotificationBodyAsync method.

    For more information, please visit our sections on GitHub: ASP.NET Core 1.1 and ASP.NET WebApi. Please note that examples do not implement security, but you will have to do it in your application.

    To ensure that a notification has been securely processed you will need to validate the authorization header using your SiteID and API Key in the same manner you compute the authorization header for a request. For more details, please go to Authentication section.

    Also, you will have to whitelist Smart2Pay’s IPs for Test and Live Environment.
    Here you will find the complete list of GlobalPay’s Environments and IPs.

    Refund Service

    Refund Service
    Documentation Method Supports cancellation Supports idempotency
    Get information on a specific refund Task<ApiResult<ApiRefundResponse>> GetRefundAsync(long paymentId, int refundId, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiRefundResponse>> GetRefundAsync(long paymentId, int refundId); No No
    Get a list of refunds of a specific payment Task<ApiResult<ApiRefundListResponse>> GetRefundListAsync(long paymentId, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiRefundListResponse>> GetRefundListAsync(long paymentId); No No
    Get the status of a refund for a card payment Task<ApiResult<ApiCardRefundStatusResponse>> GetRefundStatusAsync(long paymentId, int refundId, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiCardRefundStatusResponse>> GetRefundStatusAsync(long paymentId, int refundId); No No
    Create a Refund Task<ApiResult<ApiRefundResponse>> CreateRefundAsync(long paymentId, ApiRefundRequest refundRequest, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiRefundResponse>> CreateRefundAsync(long paymentId, ApiRefundRequest refundRequest); No No
    Task<ApiResult<ApiRefundResponse>> CreateRefundAsync(long paymentId, ApiRefundRequest refundRequest, string idempotencyToken, CancellationToken cancellationToken); Yes Yes
    Task<ApiResult<ApiRefundResponse>> CreateRefundAsync(long paymentId, ApiRefundRequest refundRequest, string idempotencyToken); No Yes
    Get refund types for a certain payment Task<ApiResult<ApiRefundTypeListResponse>> GetRefundTypesAsync(long paymentId, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiRefundTypeListResponse>> GetRefundTypesAsync(long paymentId); No No
    Get refund types (filtered) Task<ApiResult<ApiRefundTypeListResponse>> GetRefundTypesAsync(short paymentMethodId, string countryCode, string currency, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiRefundTypeListResponse>> GetRefundTypesAsync(short paymentMethodId, string countryCode, string currency); No No

    Preapproval Service

    Preapproval Service
    Documentation Method Supports cancellation Supports idempotency
    Get information on a specific Preapproval Task<ApiResult<ApiPreapprovalResponse>> GetPreapprovalAsync(int preapprovalId, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiPreapprovalResponse>> GetPreapprovalAsync(int preapprovalId); No No
    Get a list of preapprovals Task<ApiResult<ApiPreapprovalListResponse>> GetPreapprovalListAsync(CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiPreapprovalListResponse>> GetPreapprovalListAsync(); No No
    Get all payments associated with a preapproval Task<ApiResult<ApiPaymentListResponse>> GetPreapprovalPaymentsAsync(int preapprovalId, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiPaymentListResponse>> GetPreapprovalPaymentsAsync(int preapprovalId); No No
    Create a Preapproval Task<ApiResult<ApiPreapprovalResponse>> CreatePreapprovalAsync(ApiPreapprovalRequest preapprovalRequest, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiPreapprovalResponse>> CreatePreapprovalAsync(ApiPreapprovalRequest preapprovalRequest); No No
    Task<ApiResult<ApiPreapprovalResponse>> CreatePreapprovalAsync(ApiPreapprovalRequest preapprovalRequest, string idempotencyToken, CancellationToken cancellationToken); Yes Yes
    Task<ApiResult<ApiPreapprovalResponse>> CreatePreapprovalAsync(ApiPreapprovalRequest preapprovalRequest, string idempotencyToken); No Yes
    Change a Preapproval Task<ApiResult<ApiPreapprovalResponse>> ChangePreapprovalAsync(int preapprovalId, ApiPreapprovalRequest preapprovalRequest, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiPreapprovalResponse>> ChangePreapprovalAsync(int preapprovalId, ApiPreapprovalRequest preapprovalRequest); No No
    Task<ApiResult<ApiPreapprovalResponse>> ChangePreapprovalAsync(int preapprovalId, ApiPreapprovalRequest preapprovalRequest, string idempotencyToken, CancellationToken cancellationToken); Yes Yes
    Task<ApiResult<ApiPreapprovalResponse>> ChangePreapprovalAsync(int preapprovalId, ApiPreapprovalRequest preapprovalRequest, string idempotencyToken); No Yes
    Close a Preapproval Task<ApiResult<ApiPreapprovalResponse>> ClosePreapprovalAsync(int preapprovalId, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiPreapprovalResponse>> ClosePreapprovalAsync(int preapprovalId); No No

    Card Payout Service

    Card Payout Service
    Documentation Method Supports cancellation Supports idempotency
    Get a list of Payouts Task<ApiResult<ApiCardPayoutListResponse>> GetPayoutListAsync(CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiCardPayoutListResponse>> GetPayoutListAsync(); No No
    Get a list of payouts (filtered) Task<ApiResult<ApiCardPayoutListResponse>> GetPayoutListAsync(CardPayoutFilter filter, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiCardPayoutListResponse>> GetPayoutListAsync(CardPayoutFilter filter); No No
    Get the status of a Payout Task<ApiResult<ApiCardPayoutStatusResponse>> GetPayoutStatusAsync(long payoutId, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiCardPayoutStatusResponse>> GetPayoutStatusAsync(long payoutId); No No
    Get information on a specific Payout Task<ApiResult<ApiCardPayoutResponse>> GetPayoutAsync(long payoutId, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiCardPayoutResponse>> GetPayoutAsync(long payoutId); No No
    Create a Payout Task<ApiResult<ApiCardPayoutResponse>> CreatePayoutAsync(ApiCardPayoutRequest payoutRequest, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiCardPayoutResponse>> CreatePayoutAsync(ApiCardPayoutRequest payoutRequest); No No
    Task<ApiResult<ApiCardPayoutResponse>> CreatePayoutAsync(ApiCardPayoutRequest payoutRequest, string idempotencyToken, CancellationToken cancellationToken); Yes Yes
    Task<ApiResult<ApiCardPayoutResponse>> CreatePayoutAsync(ApiCardPayoutRequest payoutRequest, string idempotencyToken); No Yes

    Alternative Payment Service

    Alternative Payment Service
    Documentation Method Supports cancellation Supports idempotency
    Get information on a specific payment Task<ApiResult<ApiAlternativePaymentResponse>> GetPaymentAsync(long paymentId, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiAlternativePaymentResponse>> GetPaymentAsync(long paymentId); No No
    Get a list of payments Task<ApiResult<ApiAlternativePaymentListResponse>> GetPaymentListAsync(CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiAlternativePaymentListResponse>> GetPaymentListAsync(); No No
    Get a list of filtered payments Task<ApiResult<ApiAlternativePaymentListResponse>> GetPaymentListAsync(AlternativePaymentsFilter filter, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiAlternativePaymentListResponse>> GetPaymentListAsync(AlternativePaymentsFilter filter); No No
    Create a Payment Task<ApiResult<ApiAlternativePaymentResponse>> CreatePaymentAsync(ApiAlternativePaymentRequest paymentRequest, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiAlternativePaymentResponse>> CreatePaymentAsync(ApiAlternativePaymentRequest paymentRequest); No No
    Task<ApiResult<ApiAlternativePaymentResponse>> CreatePaymentAsync(ApiAlternativePaymentRequest paymentRequest, string idempotencyToken, CancellationToken cancellationToken); Yes Yes
    Task<ApiResult<ApiAlternativePaymentResponse>> CreatePaymentAsync(ApiAlternativePaymentRequest paymentRequest, string idempotencyToken); No Yes
    Capture a Payment Task<ApiResult<ApiAlternativePaymentResponse>> CapturePaymentAsync(long paymentId, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiAlternativePaymentResponse>> CapturePaymentAsync(long paymentId); No No
    Task<ApiResult<ApiAlternativePaymentResponse>> CapturePaymentAsync(long paymentId, string idempotencyToken, CancellationToken cancellationToken); Yes Yes
    Task<ApiResult<ApiAlternativePaymentResponse>> CapturePaymentAsync(long paymentId, string idempotencyToken); No Yes
    Cancel a Payment Task<ApiResult<ApiAlternativePaymentResponse>> CancelPaymentAsync(long paymentId, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiAlternativePaymentResponse>> CancelPaymentAsync(long paymentId); No No
    Task<ApiResult<ApiAlternativePaymentResponse>> CancelPaymentAsync(long paymentId, string idempotencyToken, CancellationToken cancellationToken); Yes Yes
    Task<ApiResult<ApiAlternativePaymentResponse>> CancelPaymentAsync(long paymentId, string idempotencyToken); No Yes
    Create a Recurring Payment Task<ApiResult<ApiAlternativePaymentResponse>> CreateRecurrentPaymentAsync(ApiAlternativePaymentRequest paymentRequest, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiAlternativePaymentResponse>> CreateRecurrentPaymentAsync(ApiAlternativePaymentRequest paymentRequest); No No
    Task<ApiResult<ApiAlternativePaymentResponse>> CreateRecurrentPaymentAsync(ApiAlternativePaymentRequest paymentRequest, string idempotencyToken, CancellationToken cancellationToken); Yes Yes
    Task<ApiResult<ApiAlternativePaymentResponse>> CreateRecurrentPaymentAsync(ApiAlternativePaymentRequest paymentRequest, string idempotencyToken); No Yes

    Payment Method Service

    Payment Method Service
    Documentation Method Supports cancellation Supports idempotency
    Payment Methods API Task<ApiResult<ApiPaymentMethodResponse>> GetPaymentMethodAsync(short paymentMethodId, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiPaymentMethodResponse>> GetPaymentMethodAsync(short paymentMethodId); No No
    Task<ApiResult<ApiPaymentMethodListResponse>> GetPaymentMethodsListAsync(CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiPaymentMethodListResponse>> GetPaymentMethodsListAsync(); No No
    Task<ApiResult<ApiPaymentMethodListResponse>> GetPaymentMethodsListAsync(string countryCode, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiPaymentMethodListResponse>> GetPaymentMethodsListAsync(string countryCode); No No
    Task<ApiResult<ApiPaymentMethodListResponse>> GetAssignedPaymentMethodsListAsync(CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiPaymentMethodListResponse>> GetAssignedPaymentMethodsListAsync(); No No
    Task<ApiResult<ApiPaymentMethodListResponse>> GetAssignedPaymentMethodsListAsync(string countryCode, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiPaymentMethodListResponse>> GetAssignedPaymentMethodsListAsync(string countryCode); No No

    Exchange Rate Service

    Exchange Rate Service
    Documentation Method Supports cancellation Supports idempotency
    Get Exchange Rates Task<ApiResult<ApiExchangeRateResponse>> GetExchangeRateAsync(string fromCurrency, string toCurrency, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiExchangeRateResponse>> GetExchangeRateAsync(string fromCurrency, string toCurrency); No No

    Card Payment Service

    Card Payment Service
    Documentation Method Supports cancellation Supports idempotency
    Get the status of a card payment Task<ApiResult<ApiCardPaymentStatusResponse>> GetPaymentStatusAsync(long paymentId, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiCardPaymentStatusResponse>> GetPaymentStatusAsync(long paymentId); Yes No
    Get information on a specific payment Task<ApiResult<ApiCardPaymentResponse>> GetPaymentAsync(long paymentId, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiCardPaymentStatusResponse>> GetPaymentAsync(long paymentId); Yes No
    Get a list of payments Task<ApiResult<ApiCardPaymentListResponse>> GetPaymentListAsync(CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiCardPaymentListResponse>> GetPaymentListAsync(); Yes No
    Get a list of direct card payments (filtered) Task<ApiResult<ApiCardPaymentListResponse>> GetPaymentListAsync(CardPaymentsFilter filter, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiCardPaymentListResponse>> GetPaymentListAsync(CardPaymentsFilter filter); Yes No
    Create a Payment Task<ApiResult<ApiCardPaymentResponse>> CreatePaymentAsync(ApiCardPaymentRequest paymentRequest, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiCardPaymentResponse>> CreatePaymentAsync(ApiCardPaymentRequest paymentRequest); No No
    Task<ApiResult<ApiCardPaymentResponse>> CreatePaymentAsync(ApiCardPaymentRequest paymentRequest, string idempotencyToken, CancellationToken cancellationToken); Yes Yes
    Task<ApiResult<ApiCardPaymentResponse>> CreatePaymentAsync(ApiCardPaymentRequest paymentRequest, string idempotencyToken); No Yes
    Capture a Payment Task<ApiResult<ApiCardPaymentResponse>> CapturePaymentAsync(long paymentId, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiCardPaymentResponse>> CapturePaymentAsync(long paymentId); No No
    Task<ApiResult<ApiCardPaymentResponse>> CapturePaymentAsync(long paymentId, string idempotencyToken, CancellationToken cancellationToken); Yes Yes
    Task<ApiResult<ApiCardPaymentResponse>> CapturePaymentAsync(long paymentId, string idempotencyToken); No Yes
    Task<ApiResult<ApiCardPaymentResponse>> CapturePaymentAsync(long paymentId, long amount, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiCardPaymentResponse>> CapturePaymentAsync(long paymentId, long amount); No No
    Task<ApiResult<ApiCardPaymentResponse>> CapturePaymentAsync(long paymentId, long amount, string idempotencyToken, CancellationToken cancellationToken); Yes Yes
    Task<ApiResult<ApiCardPaymentResponse>> CapturePaymentAsync(long paymentId, long amount, string idempotencyToken); No Yes
    Cancel a Payment Task<ApiResult<ApiCardPaymentResponse>> CancelPaymentAsync(long paymentId, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiCardPaymentResponse>> CancelPaymentAsync(long paymentId); No No
    Task<ApiResult<ApiCardPaymentResponse>> CancelPaymentAsync(long paymentId, string idempotencyToken, CancellationToken cancellationToken); Yes Yes
    Task<ApiResult<ApiCardPaymentResponse>> CancelPaymentAsync(long paymentId, string idempotencyToken); No Yes
    Fraud Check – Payment Challenged Task<ApiResult<ApiCardPaymentResponse>> AcceptChallengeAsync(long paymentId, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiCardPaymentResponse>> AcceptChallengeAsync(long paymentId); No No
    Task<ApiResult<ApiCardPaymentResponse>> AcceptChallengeAsync(long paymentId, string idempotencyToken, CancellationToken cancellationToken); Yes Yes
    Task<ApiResult<ApiCardPaymentResponse>> AcceptChallengeAsync(long paymentId, string idempotencyToken); No Yes
    Fraud Check – Payment Challenged Task<ApiResult<ApiCardPaymentResponse>> RejectChallengeAsync(long paymentId, CancellationToken cancellationToken); Yes No
    Task<ApiResult<ApiCardPaymentResponse>> RejectChallengeAsync(long paymentId); No No
    Task<ApiResult<ApiCardPaymentResponse>> RejectChallengeAsync(long paymentId, string idempotencyToken, CancellationToken cancellationToken); Yes Yes
    Task<ApiResult<ApiCardPaymentResponse>> RejectChallengeAsync(long paymentId, string idempotencyToken); No Yes

    Multiple Websites Management

    If you have multiple websites from where you initiate payments to our system, there are two possibilities for managing them.

    First one, is to manage your websites via the API and this is described in next section!

    Second one, is to manage your websites via Merchant Dashboard. You can define more sites with distinct API Keys from the Merchant Dashboard, Configuration tab, Add a New Site. This allows you to manage multiple websites under the same merchant account.

    MerchantTransactionID must be unique for each website!

    Nuvei SDK .NET Services

    Use HttpClient Builder to obtain a HttpClient Object, which you can use to initialize the services. With the HttpClient already created and the BaseAddress you can create a service instance.

    Nuvei offers 2 environments you can use to interact with our payment platform: Test and Live.

    Alternative Payment Methods Test Entry Point: https://paytest.smart2pay.com
    Alternative Payment Methods Live Entry Point: https://pay.smart2pay.com

    Credit Cards Test Entry Point: https://securetest.smart2pay.com
    Credit Cards Live Entry Point: https://secure.smart2pay.com

    See below examples on how to create a credit card payment request and a payment request for an alternative payment method of your choice.

    • You can create a credit card payment request by calling a function with the appropriate parameters given below:

      
      var baseAddress = new Uri("https://securetest.smart2pay.com");
      IHttpClientBuilder httpClientBuilder = new HttpClientBuilder(() => new AuthenticationConfiguration
      {
      	SiteId = 33258,
      	ApiKey = "JOPxYQftN9xICry9koMuER6L4SrszVHI8SLh9Q83n964tFa2GK"
      });
      var httpClient = httpClientBuilder.Build();
      var paymentService = new S2p.RestClient.Sdk.Services.CardPaymentService(httpClient, baseAddress);
      
      var paymentRequest = new CardPaymentRequest
      {
      	MerchantTransactionID = MerchantTransactionID,
      	Amount = 9000,
      	Currency = "USD",
      	ReturnURL = "http://demo.smart2pay.com/redirect.php",
      	Description = DescriptionText,
      	StatementDescriptor = "bank statement message",
      	Card = new CardDetailsRequest
      	{
      		HolderName = "John Doe",
      		Number = "4111111111111111",
      		ExpirationMonth = "02",
      		ExpirationYear = "2022",
      		RequireSecurityCode = false
      	},
      	BillingAddress = new Address
      	{
      		City = "Iasi",
      		ZipCode = "7000-49",
      		State = "Iasi",
      		Street = "Sf Lazar",
      		StreetNumber = "37",
      		HouseNumber = "5A",
      		HouseExtension = "-",
      		Country = "BR"
      	},
      	Capture = false,
      	Retry = false,
      	GenerateCreditCardToken = false,
      	PaymentTokenLifetime = 5
      }.ToApiCardPaymentRequest();
      
      var createPaymentResult = await paymentService.CreatePaymentAsync(paymentRequest);
      var createPaymentResponse = createPaymentResult.Value.Payment;
      
    • You can create a payment request for an alternative payment method by calling a function with the appropriate parameters given below:

      
      var baseAddress = new Uri("https://paytest.smart2pay.com");
      IHttpClientBuilder httpClientBuilder = new HttpClientBuilder(() => new AuthenticationConfiguration
      {
      	SiteId = 45614,
              ApiKey = "rAwLLh3rQk3uNTOPHpqydrEOdAGsRzZChCd4uyXsXoGE2tkoYA"
      });
      var httpClient = httpClientBuilder.Build();
      var paymentService = new S2p.RestClient.Sdk.Services.AlternativePaymentService(httpClient, baseAddress);
      
      var paymentRequest = new AlternativePaymentRequest()
      {
      	MerchantTransactionID = MerchantTransactionID,
      	Amount = 11,
      	Currency = "CNY",
      	MethodID = 1066,
      	ReturnURL = "http://demo.smart2pay.com/redirect.php",
      	TokenLifetime = 10,
      	Customer = new Customer
      	{
      		Email = "john@doe.com"
      	},
      	BillingAddress = new Address
      	{
      		Country = "CN"
      	}
      }.ToApiAlternativePaymentRequest();
      
      var createPaymentResult = await paymentService.CreatePaymentAsync(paymentRequest);
      var createPaymentResponse = createPaymentResult.Value.Payment;
      

    For a complete list of Integration Tests examples, please go to our section on Github: SDK .NET Integration Tests.

    Full Nuvei SDK .NET Reference

    By using the HttpClient Builder you can obtain an HttpClient which is ready to send Http Request across the network.

    With the HttpClient already created and the BaseAddress you can create a service instance.

    The library exposes the following services: Card Payment Service, Card Payout Service, Exchange Rate Service, Payment Method Service, Alternative Payment Service, Preapproval Service, Refund Service, INotificationCallback.

    Nuvei offers 2 environments you can use to interact with our payment platform: Test and Live.

    Alternative Payment Methods Test Entry Point: https://paytest.smart2pay.com
    Alternative Payment Methods Live Entry Point: https://pay.smart2pay.com

    Credit Cards Test Entry Point: https://securetest.smart2pay.com
    Credit Cards Live Entry Point: https://secure.smart2pay.com

    Nuvei SDK .NET Logging

    Smart2pay’s SDK provide support for logging using LoggerProvider which enables you to use the logging framework of your choice as a provider.

    You need to implement ILogger interface and supply a Logging factory. A Logging factory is just a Func which should return the same Logger for a given stringKey.

    See the below example of how to register the Logger Factory:

    LoggingDefault.Provider.RegisterLoggerFactory(key => {/* please add your custom logger factory code here */ })

    Please register the factory only once in the start method of your application!

    Nuvei SDK .NET Configuration

    First you need to create and initialize a HttpClient configured to accept JSON responses and also an Authentication Provider (using the Site ID and API Key obtained for your test merchant account).

    The HttpClient Builder enables the below mandatory and optional configuration points. The only mandatory configuration point is AuthenticationProvider, the next configuration points are optional and let you have more control over the services.

    Use HttpClient Builder to obtain a HttpClient Object, which you can use to initialize the services.

    Please create only one HttpClient and use it for the entire life of your apllication. For more information, please visit: https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/calling-a-web-api-from-a-net-client.

    Nuvei SDK .NET Installation

    Supporting .NET Standard 1.3+, .NET Core 1.1+, and .NET Framework 4.6.1+. If you need other versions, please contact us via technicalsupport-s2p@nuvei.com.

    Install Smart2pay.RestClient.SDK.NET via NuGet. Run the following command line in the Package Manager Console:

    PM> Install-Package S2p.RestClient.SDK

    If you do not have NuGet, you can download the package from here: https://www.nuget.org/.

    Depencies used:

    Nuvei SDK .NET

    Start integration with GlobalPay payment platform using Nuvei SDK .NET.

    Download Nuvei SDK .NET available now on NuGet.org. Source code available on GitHub.

    Please note that in order to test a full end-to-end transaction you will require a valid Nuvei test account which you can obtain at: https://www.smart2pay.com/microsoft/signup/. After you registered a test account you just need to use the API Key and the Site ID found at Getting Started > Integration Roadmap > Integration Site and configure your SDK.

    Creating your test merchant account

    Go to https://www.smart2pay.com/microsoft/signup/ and complete the form. There you will be able to create a new user for all of the Smart2pay platforms. You can access all of the Smart2pay platforms with the same email address and password that you have chosen. For more information checkout our dedicated section Registration Process.

    Log into your account and go to Getting Started > Integration Roadmap > Integration Site.

    Use the Site ID and the API Key found on that page to configure your test SDK environment.

    In order to test a full end-to-end transaction you need to configure your SDK. For more information, please go to: Nuvei SDK .NET Installation.

    3D Secure

    3D Secure is a security protocol used as an additional layer of security for online credit card transactions prior to authorization in order to prevent fraud. 3D Secure comes from the three-domain model used to provide the additional layer of secure authentication between the financial authorization process and online authentication process. The service is provided by Visa and MasterCard under the name Verified by Visa and MasterCard SecureCode.

    3D Secure 1.0 enables customers to validate transactions they make over the internet by requesting an authentication method (usually a a password-based method sent over mobile or email address is used), thus reducing the risk of fraudulent use by unauthorized individuals.

    Although the introduction of 3D Secure 1.0 has helped merchants fight fraud, it also came with a negative impact on the user experience, adding extra steps and supporting only browser-based transactions.

    This is why the new 3D Secure 2.0 has come into effect to answer and to resolve the security issues and to implement the strong customer authentication (SCA).

    SCA requires merchants to integrate into the checkout flow a two-factor authentication that is based on the use of two or more elements categorised as:

    • knowledge (something only the user knows, i.e password);
    • possession (something only the user possesses: i.e.,phone, token, certificate tec.);
    • inherence (something the user is: i.e. fingerprint, Face ID).

    For more information about the PSD2 Directive and Strong Customer Authentication (SCA) visit our section: PSD2 and Strong Customer Authentication (SCA).

    3D Secure 1.0 Payment Notification

    We will notify you about the new status of the payment to the Notification URL you setup in the Merchant Dashboard. The format of the received notification has the same structure as the response of the initial request.

    • For a payment with Success 3D Secure Authentication, you will receive the below notification:

      You need to respond with HTTP code 204 (No Content)!

      Payment notification format:

      Authorization: Basic MTAxMDpnYWJp
      
      {
        "Payment": {
          "ID": 203771,
          "ClientIP": null,
          "SkinID": null,
          "Created": "20180509114444",
          "MerchantTransactionID": "s2ptest_1002",
          "OriginatorTransactionID": null,
          "Amount": "100",
          "Currency": "EUR",
          "CapturedAmount": "0",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "Description": "S2P 3Dsecure test",
          "StatementDescriptor": null,
          "MethodID": 6,
          "MethodOptionID": null,
          "SiteID": 1010,
          "NotificationDateTime": null,
          "Customer": null,
          "BillingAddress": null,
          "ShippingAddress": null,
          "Articles": null,
          "Card": {
            "HolderName": "John Doe",
            "Number": "Ends with 0004",
            "ExpirationMonth": "5",
            "ExpirationYear": "2021",
            "IssuingBankCountry": null
          },
          "CreditCardToken": null,
          "Status": {
            "ID": 9,
            "Info": "Authorized",
            "Reasons": []
          },
          "MethodTransactionID": null,
          "PaymentTokenLifetime": null,
          "Capture": false,
          "RedirectURL": null,
          "3DSecure": true,
          "Fraud": null
        }
      }

      Response:

      204 No Content
    • For a Failed 3D Secure Authentication, you will receive the below notification:

      You need to respond with HTTP code 204 (No Content)!

      Payment notification format:

      Authorization: Basic MTAxMDpnYWJp
      
      {
        "Payment": {
          "ID": 203772,
          "ClientIP": null,
          "SkinID": null,
          "Created": "20180509114626",
          "MerchantTransactionID": "s2ptest_1003",
          "OriginatorTransactionID": null,
          "Amount": "100",
          "Currency": "EUR",
          "CapturedAmount": "0",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "Description": "S2P 3Dsecure test",
          "StatementDescriptor": null,
          "MethodID": 6,
          "MethodOptionID": null,
          "SiteID": 10101,
          "NotificationDateTime": null,
          "Customer": null,
          "BillingAddress": null,
          "ShippingAddress": null,
          "Articles": null,
          "Card": {
            "HolderName": "John Doe",
            "Number": "Ends with 0004",
            "ExpirationMonth": "5",
            "ExpirationYear": "2021",
            "IssuingBankCountry": null
          },
          "CreditCardToken": null,
          "Status": {
            "ID": 4,
            "Info": "Failed",
            "Reasons": [
              {
                "Code": "5073",
                "Info": "Error in holder authentication"
              }
            ]
          },
          "MethodTransactionID": null,
          "PaymentTokenLifetime": null,
          "Capture": false,
          "RedirectURL": null,
          "3DSecure": true,
          "Fraud": null
        }
      }

      Response:

      204 No Content

    3D Secure 1.0 Payments

    For enabling and using 3D Secure service, there are two options:

    • statically, in which we can enable for you the 3D Secure service at SiteID level;
    • dynamically, in which you send the 3DSecure parameter in the payment request.

    If you set the 3DSecure parameter to true, the customer will be required to authenticate the card used for that transaction:

    Request:

    POST https://securetest.smart2pay.com/v1/payments
    Authorization: Basic MTAxMDpnYWJp
    
    {
      "Payment": {
        "MerchantTransactionID": "s2ptest_1002",
        "Amount": 100,
        "Currency": "EUR",
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "S2P 3Dsecure test",    
        "Card": {
          "HolderName": "John Doe",
          "Number": "4548812049400004",
          "ExpirationMonth": "05",
          "ExpirationYear": "2021",
          "SecurityCode": "123"
          },
        "3DSecure": true
      }
    }
    

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    
    {
      "Payment": {
        "ID": 203771,
        "ClientIP": null,
        "SkinID": null,
        "Created": "20180509114444",
        "MerchantTransactionID": "s2ptest_1002",
        "OriginatorTransactionID": null,
        "Amount": "100",
        "Currency": "EUR",
        "CapturedAmount": "0",
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "S2P 3Dsecure test",
        "StatementDescriptor": null,
        "MethodID": 6,
        "MethodOptionID": null,
        "SiteID": 1010,
        "NotificationDateTime": null,
        "Customer": null,
        "BillingAddress": null,
        "ShippingAddress": null,
        "Articles": null,
        "Card": {
          "HolderName": "John Doe",
          "Number": "Ends with 0004",
          "ExpirationMonth": "05",
          "ExpirationYear": "2021",
          "IssuingBankCountry": null
          },
        "CreditCardToken": null,
        "Status": {
          "ID": 1,
          "Info": "Open",
          "Reasons": []
          },
        "MethodTransactionID": null,
        "PaymentTokenLifetime": 10,
        "Capture": false,
        "RedirectURL": "https://securetest.smart2pay.com/v1/Payments/FillCardDetails?PaymentToken=203771.1010.05D9FE3FD0AF7FD3D1C848A82F5F54985&SkipLandingPage=true",
        "3DSecure": true,
        "3DSecureData": {     
          "AuthenticationStatus": "Y",
          "ECI": "05",
          "CAVV": "MDA5ODYyNjQxMzEyNzQxMTQ4NzA=",
          "DSID": "f41f41f-f412f-41f-4321-f4132f4",
          "3DSecureVersion": "1.0.2"
        },
        "Fraud": null
      }
    }

    Access the RedirectURL received in the payment response and enter an identification code. Please note that the landing page will be different depending on the card issuer.

    For test purposes, please enter the identification test code received on the page (123456). For a Success 3D Secure Authentication click on the Acceptar button and for a Failed 3D Secure Authentication click on the Cancelar button.

    1 Enter Identification Code

    You will receive a payment notification to the Notification URL you setup in the Merchant Dashboard containing the new payment status. For more information on Payment Notifications with Success or Failed 3D Secure Authentication, go to our section 3D Secure Payment 1.0 Notification.

    Uruguay

    Rates per number of installments and issuer bank
    Brand Installments
    6 12 18
    Visa 2%
    Oca 2%
    Mastercard 2%
    Diners Club 2%
    Lider 2%
    Scotiabank 2%

    Peru

    Rates per number of installments and issuer bank
    Brand Installments
    3 6 9 12
    AMEX 0% 0% 0% 0%
    Visa BBVA 0% 0% 0% 0%
    Visa 0% 0% 0% 0%
    Mastercard 0% 0% 0% 0%

    Chile

    Rates per number of installments and issuer bank
    Brand Installments
    1 2 3 6 9 12
    Diners 0% 0% 0% 0% 0% 0%
    CMR 0% 0% 0% 0% 0% 0%
    AMEX 0% 0% 0% 0% 0% 0%
    Mastercard 0% 0% 0% 0% 0% 0%
    Visa 0% 0% 0% 0% 0% 0%
    Presto 0% 0% 0% 0% 0% 0%
    Magna 0% 0% 0% 0% 0% 0%

    Argentina

    Rates per number of installments and issuer bank
    Brand SubBrand Installments
    3 6 9 12
    Visa Visa Argentina SA 24,20% 43,56% 62,19% 84,70%
    Tarjeta Shopping 24,20% 43,56% 62,19% 84,70%
    Mastercard Mastercard 24,20% 43,56% 62,19% 84,70%
    Nativa Mastercard 0% 43,56% 84,70%
    Cencosud 24,20% 43,56% 62,19% 84,70%
    AMEX AMEX 19,72% 34,49% 49,19% 63,77%
    Mercado Pago + Banco Patagonia Mercado Pago + Banco Patagonia 0% 0% 62,19% 84,70%
    Naranja Naranja 24,20% 43,56% 84,70%
    Cabal Cabal 0% 17,73% 25,77% 34,42%
    Diners Diners 13,92% 26,62% 39,93% 53,24%

    Mexico

    Rates per number of installments and issuer bank
    Brand SubBrand Installments
    3 6 9 12
    Mastercard Mastercard 5,99% 9,74% 13,92% 18,55%
    Banamex 5,99% 9,74% 13,92% 18,55%
    Bancomer 5,99% 9,74% 13,92% 18,55%
    Santander 5,99% 9,74% 13,92% 18,55%
    AMEX AMEX 5,99% 9,74% 13,92% 18,55%
    Visa Visa 5,99% 9,74% 13,92% 18,55%
    Banamex 5,99% 9,74% 13,92% 18,55%
    Bancomer 5,99% 9,74% 13,92% 18,55%
    Santander 5,99% 9,74% 13,92% 18,55%

    Colombia

    Rates per number of installments and issuer bank
    Brand SubBrand Installments

    (*Interest depends on issuer)
    1 2 3 4 5 6 12 18 24 36
    Mastercard Mastercard * * * * * * * * * *
    Banco Colombia * * * * * * * N/A N/A N/A
    Banco BBVA * * * * * * * N/A N/A N/A
    AV. Villas * * * * * * * N/A N/A N/A
    Colpatria Porpias * * * * * * * N/A N/A N/A
    Banco de Bogota * * * * * * * N/A N/A N/A
    AMEX AMEX * * * * * * * * * *
    Banco de Colombia * * * * * * * N/A N/A N/A
    Colpatria Propias * * * * * * * * * *
    Visa Visa * * * * * * * * * *
    Banco Colombia * * * * * * * N/A N/A N/A
    Banco BBVA * * * * * * * N/A N/A N/A
    AV. Villas * * * * * * * N/A N/A N/A
    Colpatria Porpias * * * * * * * N/A N/A N/A
    Banco de Bogota * * * * * * * N/A N/A N/A
    Crédito Facil Codensa Crédito Facil Codensa * * * * * * * * * *
    Diners Diners * * * * * * * * * *

    Brazil

    Rates per number of installments and issuer bank
    Brand Installments
    2 3 4 5 6 7 8 9 10 11 12 15 18 24
    Cartao mercado livre 2,39% 4,78% 7,17% 8,99% 10,49% 11,83% 12,49% 13,21% 14,59% 16,00% 17,41% 21,73% 26,15% 28,04%
    ELO 2,39% 4,78% 7,17% 8,99% 10,49% 11,83% 12,49% 13,21% 14,59% 16,00% 17,41%
    Diners 2,39% 4,78% 7,17% 8,99% 10,49% 11,83% 12,49% 13,21% 14,59% 16,00% 17,41%
    AMEX 2,39% 4,78% 7,17% 8,99% 10,49% 11,83% 12,49% 13,21% 14,59% 16,00% 17,41%
    Hipercard 2,39% 4,78% 7,17% 8,99% 10,49% 11,83% 12,49% 13,21% 14,59% 16,00% 17,41%
    Mastercard 2,39% 4,78% 7,17% 8,99% 10,49% 11,83% 12,49% 13,21% 14,59% 16,00% 17,41%
    Visa 2,39% 4,78% 7,17% 8,99% 10,49% 11,83% 12,49% 13,21% 14,59% 16,00% 17,41%

    Card Payout Notification

    We will notify you about the new status of the payout to the Notification URL you setup in the Merchant Dashboard. The format of the received notification has the same structure as the response of the initial request.

    You need to respond with HTTP code 204 (No Content)!

    Payout notification format:

    Authorization: Basic MTAxMDpnYWJp
    
    {
      "Payout": {
        "ID": 214,
        "SiteID": 1010,
        "Created": "20181016133234",
        "MerchantTransactionID": "test_h4",
        "OriginatorTransactionID": null,
        "Amount": "1000",
        "Currency": "EUR",
        "Description": "payment product",
        "StatementDescriptor": null,
        "Status": {
          "ID": 2,
          "Info": "Success",
          "Reasons": []
        }
      }
    }

    Response:

    204 No Content

    Get Exchange Rates

    You can get information about exchange rates for all our supported currencies (200 + transaction currencies) by using the following GET HTTP request. The parameters are sent in the message body as a JSON object.

    This action can be exploited when DCC (Dynamic Currency Conversion) is being used. DCC means Dynamic currency conversion which allows you to initiate transactions in any currency you want, even if specific payment method doesn’t support that currency. Our system will take care of converting the transaction currency in a currency supported by the payment method.

    Just replace the fields From and To in the request below with the currency codes you want exchange rate for and make a GET request.

    Definition: GET /v1/exchangerates/{FromCurrency}/{ToCurrency}

    Where:
    • {FromCurrency} – The three letter currency code (Alphabetic code of ISO 4217) I want exchage rate from;
    • {ToCurrency} – The three letter currency code (Alphabetic code of ISO 4217) I want exchage rate to.

    Request:

    GET https://paytest.smart2pay.com/v1/exchangerates/EUR/USD
    Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=

    Response:

    HTTP/1.1 200 OK
    Content-Type: application/json; charset=utf-8
    
    {
      "ExchangeRate": {
        "From": "EUR",
        "To": "USD",
        "DateTime": "20181022130450",
        "Rate": 1.05
      }
    }

    Secure Communication

    Web security is an important responsibility that is constantly changing and evolving. We are always keeping up with the latest changes in securing internet communication.

    Using TLS 1.2, the most current version of the protocol that encrypts internet traffic of all types, enables secure internet communication, helping you protect your customers and your business.

    If you are not already communicating over TLS 1.2, we strongly recommend you to upgrade your operating systems and environments to communicate to Nuvei over TLS 1.2.

    TLS 1.2 protocol is mandatory in order to access our Credit Card Payments.

    Switching to TLS 1.2 protocol is a change that will sooner or later happen, so switch now to secure – proof your website.

    You must use HTTPS (Hyper Text Transfer Protocol Secure) in order to make your website more secure and trustworthy.

    HTTPS protocol allows communication between different systems or for transferring data from a web server to a browser to view web pages in a secure and reliable manner.

    Recurring Card Payments

    For Recurring Card Payments you will need to generate a credit card token by sending the GenerateCreditCardToken parameter to true and the card details in full in the initial payment request. Afterwards, the recurring card payments will be initiated by sending the new generated token instead of the card details.

    Please note that the credit card token has a usage limit that we can set. If the token is sent more times than our set limit the payment will fail.

    If you initiate a Card payment and set the GenerateCreditCardToken parameter to true, the CardOnFile object is mandatory to be sent. A token element is sent in the response, containing the value of the newly created credit card token, that will be used to initiate future Recurring Payments.

    For more information regarding CardOnFile object please go to our dedicated section Card on file transactions (COF).

      • See below an example of an initial card payment with the GenerateCreditCardToken parameter set to true and mandatory Card details and CardOnFile objects:

        Request:

        POST https://securetest.smart2pay.com/v1/payments
        Authorization: Basic MTAxMDpnYWJp
        
        {
          "Payment": {
            "MerchantTransactionID": "s2ptest_m20",
            "Amount": 1000,
            "Currency": "EUR",
            "ReturnURL": "http://demo.smart2pay.com/redirect.php",   
            "Card": {
              "HolderName": "John Doe",
              "Number": "4548812049400004",
              "ExpirationMonth": "05",
              "ExpirationYear": "2021",
              "SecurityCode": "123",
              "RequireSecurityCode": true
              },
            "GenerateCreditCardToken": true,
            "CardOnFile":{
                 "IsInitial": true,
                 "TransactionType": "Recurring"
            }
          }
        }

        Response:

        HTTP/1.1 201 Created
        Content-Type: application/json; charset=utf-8
        
        {
          "Payment": {
            "ID": 203747,
            "ClientIP": null,
            "SkinID": null,
            "Created": "20180502085305",
            "MerchantTransactionID": "s2ptest_m20",
            "OriginatorTransactionID": null,
            "Amount": "1000",
            "Currency": "EUR",
            "CapturedAmount": "0",
            "ReturnURL": "http://demo.smart2pay.com/redirect.php",
            "Description": null,
            "StatementDescriptor": null,
            "MethodID": 6,
            "MethodOptionID": null,
            "SiteID": 1010,
            "NotificationDateTime": null,
            "Customer": null,
            "BillingAddress": null,
            "ShippingAddress": null,
            "Articles": null,
            "Card": {
              "HolderName": "John Doe",
              "Number": "Ends with 0004",
              "ExpirationMonth": "05",
              "ExpirationYear": "2021",
              "IssuingBankCountry": "NL"
              },
            "CreditCardToken": {
              "Value": "C0D510746B513D66093609AA92BDA295"
              },
            "Status": {
              "ID": 9,
              "Info": "Authorized",
              "Reasons": []
              },
            "MethodTransactionID": null,
            "PaymentTokenLifetime": null,
            "Capture": false,
            "RedirectURL": null,
            "3DSecure": false,
            "CardOnFile":{
                 "IsInitial": true,
                 "TransactionType": "Recurring"
             },
            "Fraud": {
              "Status": "Accept",
              "CheckMode": "CheckOnPreAuthorisation",
              "Score": 31,
              "Reason": "No decision provided"
            }
          }
        }

    The token received in the response of the initial payment, together with the RequireSecurityCode parameter set to false, can be used to initiate future Recurring Payments.

    For Recurring Payments, the security code is not needed, you only need to send the RequireSecurityCode parameter set to false. In this case, the client will not be redirected to the form page to fill in the security code, but the payment will be directly sent to the upstream processor.

    • See below an example of a Recurring Card Payment:

      Request:

      POST https://securetest.smart2pay.com/v1/payments
      Authorization: Basic MTAxMDpnYWJp
      
      {
        "Payment": {
          "MerchantTransactionID": "s2ptest_m23",
          "Amount": 1000,
          "Currency": "EUR",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "CreditCardToken": {
            "Value": "C0D510746B513D66093609AA92BDA295",
            "RequireSecurityCode": false
            },
          "CardOnFile": {
                "IsInitial": false,
                "TransactionType": "Recurring",
                "InitialPaymentID": 203747
          }
        }
      }

      Response:

      HTTP/1.1 201 Created
      Content-Type: application/json; charset=utf-8
      
      {
        "Payment": {
          "ID": 203751,
          "ClientIP": null,
          "SkinID": null,
          "Created": "20180502090314",
          "MerchantTransactionID": "s2ptest_m23",
          "OriginatorTransactionID": null,
          "Amount": "1000",
          "Currency": "EUR",
          "CapturedAmount": "0",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "Description": null,
          "StatementDescriptor": null,
          "MethodID": 6,
          "MethodOptionID": null,
          "SiteID": 1010,
          "NotificationDateTime": null,
          "Customer": null,
          "BillingAddress": null,
          "ShippingAddress": null,
          "Articles": null,
          "Card": {
            "HolderName": "John Doe",
            "Number": "Ends with 0004",
            "ExpirationMonth": "05",
            "ExpirationYear": "2021",
            "IssuingBankCountry": "NL"
            },
          "CreditCardToken": {
            "Value": "C0D510746B513D66093609AA92BDA295"
            },
          "Status": {
            "ID": 9,
            "Info": "Authorized",
            "Reasons": []
            },
          "MethodTransactionID": null,
          "PaymentTokenLifetime": null,
          "Capture": false,
          "RedirectURL": null,
          "3DSecure": false,
          "CardOnFile": {
                "IsInitial": false,
                "TransactionType": "Recurring",
                "InitialPaymentID": 203747
          },
          "Fraud": {
            "Status": "Accept",
            "CheckMode": "CheckOnPreAuthorisation",
            "Score": 31,
            "Reason": "No decision provided"
          }
        }
      }

    • For LATAM region it is mandatory to send in the initial Card payment the Country parameter for the Billing Address together with the Email parameter and the SocialSecurityNumber parameter of the Customer. You also need to set the GenerateCreditCardToken parameter to true and a token element is sent in the response, containing the value of the newly created credit card token. Checkout the example below of an initial card payment with all the mandatory parameters to be sent for LATAM region:

      Request:

      POST https://securetest.smart2pay.com/v1/payments
      Authorization: Basic MTAxMDpnYWJp
      
      {
        "Payment": {
          "MerchantTransactionID": "s2ptest_m21",
          "Amount": 1000,
          "Currency": "EUR",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",   
          "Card": {
            "HolderName": "John Doe",
            "Number": "4548812049400004",
            "ExpirationMonth": "05",
            "ExpirationYear": "2021",
            "SecurityCode": "123",
            "RequireSecurityCode": true
            },
          "Customer": {
            "Email": "customer@test.com",
            "SocialSecurityNumber": "45908-28324"
          },
          "GenerateCreditCardToken": true,
          "CardOnFile": {
                "IsInitial": true,
                "TransactionType": "Recurring"
          }
        }
      }

      Response:

      HTTP/1.1 201 Created
      Content-Type: application/json; charset=utf-8
      
      {
        "Payment": {
          "ID": 203746,
          "ClientIP": null,
          "SkinID": null,
          "Created": "20180502085305",
          "MerchantTransactionID": "s2ptest_m20",
          "OriginatorTransactionID": null,
          "Amount": "1000",
          "Currency": "EUR",
          "CapturedAmount": "0",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "Description": null,
          "StatementDescriptor": null,
          "MethodID": 6,
          "MethodOptionID": null,
          "SiteID": 1010,
          "NotificationDateTime": null,
          "Customer": {
            "ID": 115,
            "MerchantCustomerID": "null",
            "Email": "customer@test.com",
            "FirstName": "John",
            "LastName": "Doe",
            "Gender": "1",
            "SocialSecurityNumber": "45908-28324",
            "Phone": "0744-783322",
            "Company": "S2P"
          },
          "BillingAddress": null,
          "ShippingAddress": null,
          "Articles": null,
          "Card": {
            "HolderName": "John Doe",
            "Number": "Ends with 0004",
            "ExpirationMonth": "05",
            "ExpirationYear": "2021",
            "IssuingBankCountry": "NL"
            },
          "CreditCardToken": {
            "Value": "C0D510746B513D66093609AA92BDA295"
            },
          "Status": {
            "ID": 9,
            "Info": "Authorized",
            "Reasons": []
            },
          "MethodTransactionID": null,
          "PaymentTokenLifetime": null,
          "Capture": false,
          "Retry": false,
          "RedirectURL": null,
          "3DSecure": false,
          "CardOnFile": {
                "IsInitial": true,
                "TransactionType": "Recurring"
          },
          "Fraud": {
            "Status": "Accept",
            "CheckMode": "CheckOnPreAuthorisation",
            "Score": 31,
            "Reason": "No decision provided"
          }
        }
      }

      The token received in the response of the initial payment, can be used to initiate future Recurring Payments for LATAM region, like in the below example:

      Request:

      POST https://securetest.smart2pay.com/v1/payments
      Authorization: Basic MTAxMDpnYWJp
      
      {
        "Payment": {
          "MerchantTransactionID": "s2p_m6",
          "Amount": 10000,
          "Currency": "BRL",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "CreditCardToken": {
            "Value": "F43F90A5CB613D91F704407D4E297EA1"
            },
          "GenerateCreditCardToken": true,
          "CardOnFile": {
                "IsInitial": false,
                "TransactionType": "Recurring",
                "InitialPaymentID": 203746
          }
        }
      }

      Response:

      HTTP/1.1 201 Created
      Content-Type: application/json; charset=utf-8
      
      {
        "Payment": {
          "ID": 203754,
          "ClientIP": null,
          "SkinID": null,
          "Created": "20180430092243",
          "MerchantTransactionID": "s2p_m6",
          "OriginatorTransactionID": null,
          "Amount": "10000",
          "Currency": "BRL",
          "CapturedAmount": "0",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "Description": null,
          "StatementDescriptor": null,
          "MethodID": 6,
          "MethodOptionID": null,
          "SiteID": 1010,
          "NotificationDateTime": null,
          "Customer": null,
          "BillingAddress": null,
          "ShippingAddress": null,
          "Articles": null,
          "Card": {
            "HolderName": "John Doe",
            "Number": "",
            "ExpirationMonth": "05",
            "ExpirationYear": "2021",
            "IssuingBankCountry": "NL"
            },
          "CreditCardToken": {
            "Value": "F43F90A5CB613D91F704407D4E297EA1"
            },
          "Status": {
            "ID": 9,
            "Info": "Authorized",
            "Reasons": []
            },
          "MethodTransactionID": null,
          "PaymentTokenLifetime": null,
          "Capture": false,
          "RedirectURL": null,
          "3DSecure": false,
          "CardOnFile": {
                "IsInitial": false,
                "TransactionType": "Recurring",
                "InitialPaymentID": 203746
          },
          "Fraud": {
            "Status": "Accept",
            "CheckMode": "CheckOnPreAuthorisation",
            "Score": 31,
            "Reason": "No decision provided"
          }
        }
      }

    Chargebacks API

    A chargeback is the reversal of a credit card payment, forcibly initiated by the cardholder through the issuing bank of the instrument used to settle a debt. After the bank verifies the claim and an investigation occurs, the bank validates the cardholders request, and removes money from the merchant’s account back to the customer.

    Any chargeback request received will be verified according to the regulations of the relevant card issuer. In some cases, you may need to provide additional documentation, via email, in order to resolve the chargeback.

    Reasons for a chargeback

    Typically, a cardholder might file a chargeback for any of the following reasons:

      • duplicate billing;
      • incorrect amount billed;
      • refund never issued;
      • the customer claims he did not authorize the charge or that his identity was stolen;
      • the customer claims he has never received the products or services.

    We strongly recommend you avoid such situations where the customer initiates a chargeback process. Refunds are always preferable to chargebacks, because no negative chargeback score is linked to your account and customer satisfaction is increased. The chargeback process can be very costly as it includes chargeback fees and time needed to gather the required documentation. Also, there are situations where chargebacks can be non-disputable, meaning the dispute is always lost and you have no control over the chargeback process.

    Notification Types:

    We will notify you in real time of any chargebacks requests received (the payment is disputed by the customer) or when the status of the payment changes (the cardholder has won the dispute and has received the money back). You will receive two types of notifications:

    • Notification Type Dispute, in which we will notify you about the status of the Dispute, it can be either Open – 1 / DisputeWon – 23 / DisputeLost – 24;
    • Notification type Payment, in which according to the status of the Dispute we will notify you about the new status of the Payment, it can be either Success – 2 / Captured – 11 / PartiallyCaptured – 35 / Disputed – 19 / Chargedback – 26.
    • Notification type Dispute

      When a payment is disputed by the customer, it will also change its status to Disputed. If the customer wins the dispute, the dispute changes its status in DisputeLost – 24 and we will notify of the event:

      Dispute notification format:

      {
      "Dispute": {
          "ID": 158,
          "SiteID": 30563,
          "Created": "20240318090132",
          "PaymentID": 6880987,
          "MethodID": 113,
          "Amount": "8801",
          "Currency": "USD",
          "Status": {
            "ID": 23,
            "Info": "DisputeWon",
            "Reasons": null
          }
        }
      }
      
      

      Response:

      204 No Content
    • Dispute reasons for CashApp

      For the CashApp method, the notifications will also include the reason code and reason info; this applies to all 3 dispute states: Open – 1 / DisputeWon – 23 / DisputeLost – 24.

      Open Dispute notification format:

      {
      {
        "Dispute": {
          "ID": 203,
          "SiteID": 30563,
          "Created": "20250224120232",
          "PaymentID": 8063017,
          "MethodID": 113,
          "Amount": "8801",
          "Currency": "USD",
          "ProviderDisputeID": "DSPT_d49y4043pcy42brk461np6cqz",
          "Status": {
            "ID": 1,
            "Info": "Open",
            "Reasons": [
              {
                "Code": "905",
                "Info": "Canceled services."
              }
            ]
          }
        }
      }
      
      

      Lost Dispute notification format:

      {
      {
        "Dispute": {
          "ID": 204,
          "SiteID": 30563,
          "Created": "20250224122046",
          "PaymentID": 8063016,
          "MethodID": 113,
          "Amount": "8801",
          "Currency": "USD",
          "ProviderDisputeID": "DSPT_ptyqbwxkktzetfwvyzbjfd92z",
          "Status": {
            "ID": 24,
            "Info": "DisputeLost",
            "Reasons": [
              {
                "Code": "905",
                "Info": "Canceled services."
              }
            ]
          }
        }
      }
      
      

      Won Dispute notification format:

      {
      {
        "Dispute": {
          "ID": 203,
          "SiteID": 30563,
          "Created": "20250224120232",
          "PaymentID": 8063017,
          "MethodID": 113,
          "Amount": "8801",
          "Currency": "USD",
          "ProviderDisputeID": "DSPT_d49y4043pcy42brk461np6cqz",
          "Status": {
            "ID": 23,
            "Info": "DisputeWon",
            "Reasons": [
              {
                "Code": "905",
                "Info": "Canceled services."
              }
            ]
          }
        }
      }
      
      
    • Notification type Payment

      When a payment with Success status is disputed by the customer and you lose the dispute, the payment changes its status in Chargedback – 26 and we will notify you about the new status of the payment:

      Payment notification format:

      Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
      
      {
        "Payment": {
          "ID": 169144,
          "SkinID": null,
          "ClientIP": null,
          "Created": "20180215151027",
          "MerchantTransactionID": "609374486387",
          "OriginatorTransactionID": null,
          "Amount": "100",
          "Currency": "EUR",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "Description": "",
          "MethodID": 32,
          "MethodOptionID": null,
          "IncludeMethodIDs": null,
          "ExcludeMethodIDs": null,
          "PrioritizeMethodIDs": null,
          "SiteID": 1000,
          "NotificationDateTime": null,
          "Customer": null,
          "BillingAddress": null,
          "ShippingAddress": null,
          "Articles": null,
          "Details": null,
          "ReferenceDetails": null,
          "CustomParameters": null,
          "PreapprovalID": null,
          "Status": {
            "ID": 26,
            "Info": "Chargedback",
            "Reasons": null
          },
          "MethodTransactionID": null,
          "TokenLifetime": null,
          "Capture": null,
          "PreapprovalDetails": null,
          "RedirectURL": null
        }
      }

      Response:

      204 No Content

      When a card payment with Captured or PartiallyCaptured status is disputed by the customer and you lose the dispute, the payment changes its status in Chargedback – 26 and we will notify you about the new status of the payment:

      Payment notification format:

      Authorization: Basic MzAyMDE6aEo1Um9iWXg5cjdGZk53Q3ZIWTlMWEhxcXIrRkV6cmM3YUp2UVFrNEdhejFtZzdSeXk=
      
      {
        "Payment": {
          "ID": 202242,
          "ClientIP": null,
          "SkinID": null,
          "Created": "20161205093117",
          "MerchantTransactionID": "s2ptest_h12",
          "OriginatorTransactionID": "100_a",
          "Amount": "2000",
          "Currency": "EUR",
          "CapturedAmount": "2000",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "Description": "payment product",
          "StatementDescriptor": "bank statement message",
          "MethodID": 6,
          "MethodOptionID": null,
          "SiteID": 1010,
          "NotificationDateTime": null,
          "Customer": {
            "ID": 115,
            "MerchantCustomerID": "null",
            "Email": "customer@test.com",
            "FirstName": "John",
            "LastName": "Doe",
            "Gender": "1",
            "SocialSecurityNumber": "45908-28324",
            "Phone": "0744-783322",
            "Company": "S2P"
          },
          "BillingAddress": {
            "ID": 253,
            "City": "Iasi",
            "ZipCode": "7000-49",
            "State": "Iasi",
            "Street": "Sf Lazar",
            "StreetNumber": "37",
            "HouseNumber": "5A",
            "HouseExtension": "-",
            "Country": "RO"
          },
          "ShippingAddress": {
            "ID": 87,
           "City": "Iasi",
            "ZipCode": "700049",
            "State": "Iasi",
            "Street": "Sf Lazar",
            "StreetNumber": "37",
            "HouseNumber": "-",
            "HouseExtension": "-",
            "Country": "RO"
          },
          "Articles": null,
          "Card": {
            "HolderName": "John Doe",
            "Number": "VISA-1111",
            "ExpirationMonth": "02",
            "ExpirationYear": "2018"
          },
          "CreditCardToken": {
            "Value": "6BEBF42B0E43D3BFD360DFB5EFF9D96D"
          },
          "Status": {
            "ID": 26,
            "Info": "Chargedback",
            "Reasons": []
          },
          "MethodTransactionID": null,
          "PaymentTokenLifetime": null,
          "Capture": true,
          "Retry": true,
          "RedirectURL": null,
          "3DSecure": null
        }
      }

      Response:

      204 No Content

    Required Parameters

    Definition: POST https://paytest.smart2pay.com/v1/payments

    Below you will find a full example of a payment request for Klarna Payments method (with Success and Bad response). The required parameters of the payment are sent in the message body as a JSON object.

    A 201 HTTP response (Created) is returned if the payment was correctly initialized.

    For more information about status codes, please go to Basic HTTP Status Codes.

    Request: 

    GET https://paytest.smart2pay.com/v1/payments
    Authorization: Basic MzA1NjM6WVlxMEVtZHFYRlNwS0REeUw1Wjd5SGp0cTdXNExlU1dUWTRIcnFHL0VlSnV4ckRXRUg= 

    {
        "Payment": {
            "Amount": 1400,
            "Currency": "EUR",
            "Description": "testy smart2pay",
            "MethodID": 1078,
            "ReturnURL": "https://demo2.smart2pay.com/redirect.php",
            "MerchantTransactionID": "TestKlarnaPaymentsUS1_{{$randomInt}}",
            "Articles": [
                {
                    "MerchantArticleID": "1235",
                    "Quantity": 2,
                    "Name": "Physical",
                    "Price": 900,
                    "VAT": 300,
                    "DiscountValue": 0,
                    "Type": 5,
                    "ProductUrl": "https://product.url.com",
                    "ImageUrl": "https://image.url.com"
                },
                {
                    "MerchantArticleID": "1237",
                    "Quantity": 2,
                    "Name": "Discount",
                    "Price": 200,
                    "DiscountValue": 0,
                    "Type": 4,
                    "ProductUrl": "https://product.url.com",
                    "ImageUrl": "https://image.url.com"
                }
            ],
            "BillingAddress": {
                "ZipCode": "90210",
                "State": "CA",
                "City": "Beverly Hills",
                "Street": "Lombard St 10",
                "StreetNumber": "Apt 214",
                "Country": "DE"
            },
            "ShippingAddress": {
                "ZipCode": "90210",
                "State": "CA",
                "City": "Beverly Hills",
                "Street": "Lombard St 10",
                "StreetNumber": "Apt 214",
                "Country": "DE"
            },
            "Customer": {
                "Email": "Testy_alex@email.com",
                "Phone": "8638691164",
                "FirstName": "Testy",
                "LastName": "Alex"
            },
            "TokenLifetime": 10
        }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
        "Payment": {
            "ID": 8066818,
            "SkinID": null,
            "ClientIP": null,
            "Created": "20250320124947",
            "MerchantTransactionID": "TestKlarnaPaymentsUS1_30",
            "OriginatorTransactionID": null,
            "Amount": "1400",
            "Currency": "EUR",
            "CapturedAmount": null,
            "ReturnURL": "https://demo2.smart2pay.com/redirect.php",
            "ReturnURLSuccess": null,
            "ReturnURLFailure": null,
            "ReturnURLCancel": null,
            "ReturnURLProcessing": null,
            "Description": "testy smart2pay",
            "MethodID": 1078,
            "MethodOptionID": null,
            "MethodOptionIdString": null,
            "BankName": null,
            "IncludeMethodIDs": null,
            "ExcludeMethodIDs": null,
            "PrioritizeMethodIDs": null,
            "SiteID": 30563,
            "NotificationDateTime": null,
            "Customer": {
                "MerchantCustomerID": null,
                "Email": "Testy_alex@email.com",
                "FirstName": "Testy",
                "LastName": "Alex",
                "Gender": null,
                "SocialSecurityNumber": null,
                "Phone": "8638691164",
                "Company": null,
                "DateOfBirth": null
            },
            "BillingAddress": {
                "ID": 17064,
                "City": "Beverly Hills",
                "ZipCode": "90210",
                "State": "CA",
                "Street": "Lombard St 10",
                "StreetNumber": "Apt 214",
                "HouseNumber": null,
                "HouseExtension": null,
                "Country": "DE"
            },
            "ShippingAddress": {
                "ID": 17064,
                "City": "Beverly Hills",
                "ZipCode": "90210",
                "State": "CA",
                "Street": "Lombard St 10",
                "StreetNumber": "Apt 214",
                "HouseNumber": null,
                "HouseExtension": null,
                "Country": "DE"
            },
            "Articles": [
                {
                    "MerchantArticleID": "1235",
                    "Name": "Physical",
                    "Quantity": 2,
                    "Price": "900",
                    "VAT": "300",
                    "Discount": "0",
                    "Type": "5",
                    "ImageUrl": "https://image.url.com",
                    "ProductUrl": "https://product.url.com",
                    "TaxType": 0,
                    "DiscountValue": "0"
                },
                {
                    "MerchantArticleID": "1237",
                    "Name": "Discount",
                    "Quantity": 2,
                    "Price": "200",
                    "VAT": "0",
                    "Discount": "0",
                    "Type": "4",
                    "ImageUrl": "https://image.url.com",
                    "ProductUrl": "https://product.url.com",
                    "TaxType": 0,
                    "DiscountValue": "0"
                }
            ],
            "Details": null,
            "ReferenceDetails": null,
            "CustomParameters": null,
            "PreapprovalID": null,
            "Status": {
                "ID": 1,
                "Info": "Open",
                "Reasons": null
            },
            "Fraud": null,
            "MethodTransactionID": null,
            "OriginalMerchantTID": null,
            "Unknown": false,
            "TokenLifetime": 10,
            "Capture": null,
            "PreapprovalDetails": null,
            "RedirectURL": "https://webapp-apm-globalpay-api-qa.nuvei.com/Home?PaymentToken=D867F21C35B0C30982B50A1D8A91A47B.8066818",
            "Splits": null
        }
    }

    In case of an API error, an HTTP 4xx (you did something wrong) or HTTP 5xx (we did something wrong) response is returned.

    For more information about the reasons of a wrong request response see our section GlobalPay Return Codes.

    Request:

    GET https://paytest.smart2pay.com/v1/payments
    Authorization: Basic MzA1NjM6WVlxMEVtZHFYRlNwS0REeUw1Wjd5SGp0cTdXNExlU1dUWTRIcnFHL0VlSnV4ckRXRUg= 

    {
      "Payment": {
        "Amount": 899,
        "Currency": "GBP",
        "Description": "test smart2pay",
        "MethodID": 1078,
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "MerchantTransactionID": "s2ptest_g231",
        "SkinID": 11,
        "RedirectInIframe": true,
        "RedirectMerchantInIframe": true,
        "Articles": [
          { 
          "MerchantArticleID": "1235",
          "Quantity": 1,
          "Name": "Physical",
          "Price": 1000,
          "VAT": 1200,
          "DiscountValue": 100,
          "Discount": 9,
          "Type": 0
          }
        ],
      "BillingAddress": {
        "City": "London",
        "ZipCode": "W13 3BG",
        "State": "London",
        "Street": "New Burlington St 113",
        "StreetNumber": "Apt 214",
        "Country": "GB"
        },
       "ShippingAddress": {
         "City": "London",
         "ZipCode": "W13 3BG",
         "State": "London",
         "Street": "New Burlington St 113",
         "StreetNumber": "Apt 214",
         "Country": "GB"
        },
       "Customer": {
         "Email": "youremail@email.com",
         "Phone": "+440745785615",
         "FirstName": "Doe",
         "LastName": "Test"     
         },
      "TokenLifetime": 10
     
       }
    }

    Response:

    HTTP/1.1 400 Bad Request
    Content-Type: application/json; charset=utf-8
    
    {
      "Payment": {
        "ID": 3599465,
        "SkinID": 11,
        "ClientIP": null,
        "Created": "20180228080514",
        "MerchantTransactionID": "s2ptest_g231",
        "OriginatorTransactionID": null,
        "Amount": "899",
        "Currency": "GBP",
        "CapturedAmount": null,
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "test smart2pay",
        "MethodID": 1078,
        "MethodOptionID": null,
        "IncludeMethodIDs": null,
        "ExcludeMethodIDs": null,
        "PrioritizeMethodIDs": null,
        "SiteID": 30201,
        "NotificationDateTime": "20180228080514",
        "Customer": null,
        "BillingAddress": null,
        "ShippingAddress": null,
        "Articles": null,
        "Details": null,
        "ReferenceDetails": null,
        "CustomParameters": null,
        "PreapprovalID": null,
        "Status": {
          "ID": 4,
          "Info": "Failed",
          "Reasons": [
          {
            "Code": 129,
            "Info": "Article is invalid - Type - RegEx: ^(1|2|3|4|5|6|7|8|9|10|11)$;"
            }
          ]
        },
        "MethodTransactionID": null,
        "TokenLifetime": null,
        "Capture": null,
        "PreapprovalDetails": null,
        "RedirectURL": null
        }
    }

    Austria (AT)

    Below you can find an example of a standard Klarna flow.

  • Next step is entering the OTP received code.1 Enter required details
  • Once the OTP code is confirmed, an intermediary processing page is displayed, followed by transaction confirmation.1 Enter required details
  • On-Site Messaging

    Nuvei supports Klarna’s On-site messaging solution, which enables merchants to add tailored messaging that informs customers about available Klarna payment options as they browse the merchant’s online store, even before they decide to buy.
    Merchants integrate Klarna’s On-site messaging separately from their Nuvei integration. For instructions, see the the On-site messaging section of the Klarna Docs website.

    Fraud Check – Payment Challenged

    If the system detects a possible malicious transaction, that transaction will be challenged by the fraud check provider. There are 2 possible outcomes after running your own processes and procedures for fraud management: you can reject or accept the challenge.

    The card payment is initiated and the Fraud Check system detects a possible suspicious behavior or rule. The payment is challenged by the fraud check provider. You can reject or accept the challenge.

    Request:

    POST https://securetest.smart2pay.com/v1/payments
    Authorization: Basic MTAxMDpnYWJp
    
    {
      "Payment": {
        "MerchantTransactionID": "s2ptest_j10",
        "Amount": 100,
        "Currency": "BRL",
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "test payment",
        "StatementDescriptor": "card payment",
        "BillingAddress": {
          "City": "Iasi",
          "ZipCode": "7000-49",
          "State": "Iasi",
          "Street": "Sf Lazar",
          "StreetNumber": "37",
          "HouseNumber": "5A",
          "HouseExtension": "-",
          "Country": "BR"
        },
        "ShippingAddress": null,
        "Customer": {
          "FirstName":"John",
          "LastName":"Doe",
          "Email": "challenge@challenge.com",
          "SocialSecurityNumber": "00003456789"
        },
        "Card": {
          "HolderName": "John Doe",
          "Number": "4111111111111111",
          "ExpirationMonth": "02",
          "ExpirationYear": "2021",
          "SecurityCode": "312"
        },
        "Installments": 3,
        "Capture": false,
        "GenerateCreditCardToken": false,
        "PaymentTokenLifetime": 100,
        "3DSecure": false,
        "Language": "ro-RO",
        "SkinID": 200
      }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
      "Payment": {
        "ID": 203373,
        "ClientIP": null,
        "SkinID": 200,
        "Created": "20180209082529",
        "MerchantTransactionID": "s2ptest_j10",
        "OriginatorTransactionID": null,
        "Amount": "100",
        "Currency": "BRL",
        "CapturedAmount": "0",
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "test payment",
        "StatementDescriptor": "card payment",
        "MethodID": 6,
        "MethodOptionID": null,
        "SiteID": 1010,
        "NotificationDateTime": null,
        "Customer": {
          "ID": 298,
          "MerchantCustomerID": null,
          "Email": "challenge@challenge.com",
          "FirstName": "John",
          "LastName": "Doe",
          "Gender": null,
          "SocialSecurityNumber": "00003456789",
          "Phone": null,
          "Company": null
          },
        "BillingAddress": {
          "ID": 9590,
          "City": "Iasi",
          "ZipCode": "7000-49",
          "State": "Iasi",
          "Street": "Sf Lazar",
          "StreetNumber": "37",
          "HouseNumber": "5A",
          "HouseExtension": "-",
          "Country": "BR"
          },
        "ShippingAddress": null,
        "Articles": null,
        "Card": {
          "HolderName": "John Doe",
          "Number": "Ends with 1111",
          "ExpirationMonth": "02",
          "ExpirationYear": "2021",
          "IssuingBankCountry": null
          },
        "CreditCardToken": null,
        "Status": {
          "ID": 30,
          "Info": "PendingChallengeConfirmation",
          "Reasons": []
          },
        "MethodTransactionID": null,
        "PaymentTokenLifetime": null,
        "Capture": false,
        "RedirectURL": null,
        "3DSecure": false,
        "Fraud": {
          "Status": "Challenge",
          "Score": 55,
          "Reason": "Transaction hit a velocity or rule threshold"
          },
        "Installments": 3
        }
    }

    Accept the Challenge:

    Request:

    POST https://securetest.smart2pay.com/v1/payments/203373/challenge/accept
    Authorization: Basic MTAxMDpnYWJp

    Response:

    HTTP/1.1 200 OK
    Content-Type: application/json; charset=utf-8
    
    {
      "Payment": {
        "ID": 203373,
        "ClientIP": null,
        "SkinID": null,
        "Created": "20180209082529",
        "MerchantTransactionID": "s2ptest_j10",
        "OriginatorTransactionID": null,
        "Amount": "100",
        "Currency": "BRL",
        "CapturedAmount": "0",
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "test payment",
        "StatementDescriptor": "card payment",
        "MethodID": 6,
        "MethodOptionID": null,
        "SiteID": 1010,
        "NotificationDateTime": null,
        "Customer": null,
        "BillingAddress": null,
        "ShippingAddress": null,
        "Articles": null,
        "Card": {
          "HolderName": "John Doe",
          "Number": "411111******1111",
          "ExpirationMonth": "2",
          "ExpirationYear": "2021",
          "IssuingBankCountry": null
          },
        "CreditCardToken": null,
        "Status": {
          "ID": 9,
          "Info": "Authorized",
          "Reasons": []
          },
        "MethodTransactionID": null,
        "PaymentTokenLifetime": null,
        "Capture": false,
        "RedirectURL": null,
        "3DSecure": false,
        "Fraud": {
          "Status": "Challenge",
          "Score": 55,
          "Reason": "Transaction hit a velocity or rule threshold"
          },
        "Installments": 3
        }
    }

    Reject the Challenge:

    Request:

    POST https://securetest.smart2pay.com/v1/payments/203374/challenge/reject
    Authorization: Basic MTAxMDpnYWJp

    Response:

    HTTP/1.1 400 Bad Request
    Content-Type: application/json; charset=utf-8
    
    {
      "Payment": {
        "ID": 203374,
        "ClientIP": null,
        "SkinID": null,
        "Created": "20180209082726",
        "MerchantTransactionID": "s2ptest_j11",
        "OriginatorTransactionID": null,
        "Amount": "100",
        "Currency": "BRL",
        "CapturedAmount": "0",
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "test payment",
        "StatementDescriptor": "card payment",
        "MethodID": 6,
        "MethodOptionID": null,
        "SiteID": 1010,
        "NotificationDateTime": null,
        "Customer": {
          "ID": 298,
          "MerchantCustomerID": null,
          "Email": "challenge@challenge.com",
          "FirstName": "John",
          "LastName": "Doe",
          "Gender": null,
          "SocialSecurityNumber": "00003456789",
          "Phone": null,
          "Company": null
          },
        "BillingAddress": {
          "ID": 9590,
          "City": "Iasi",
          "ZipCode": "7000-49",
          "State": "Iasi",
          "Street": "Sf Lazar",
          "StreetNumber": "37",
          "HouseNumber": "5A",
          "HouseExtension": "-",
          "Country": "BR"
          },
        "ShippingAddress": null,
        "Articles": null,
        "Card": {
          "HolderName": "John Doe",
          "Number": "411111******1111",
          "ExpirationMonth": "2",
          "ExpirationYear": "2021",
          "IssuingBankCountry": null
          },
        "CreditCardToken": null,
        "Status": {
          "ID": 3,
          "Info": "Cancelled",
          "Reasons": [
          {
            "Code": 118,
            "Info": "Transaction rejected by merchant"
            }
          ]
        },
        "MethodTransactionID": null,
        "PaymentTokenLifetime": null,
        "Capture": false,
        "RedirectURL": null,
        "3DSecure": false,
        "Fraud": {
          "Status": "Challenge",
          "Score": 55,
          "Reason": "Transaction hit a velocity or rule threshold"
          },
        "Installments": 3
        }
    }

    Fraud Check – Payment Denied

    If the system detects a malicious transaction, that transaction will be rejected by the fraud check provider. You will be given in the response the reason of why the transaction has Failed in the Reason field in the Fraud object.

    The card payment is initiated and the Fraud Check system detects a suspicious behavior or rule. The payment is denied.

    Request:

    POST https://securetest.smart2pay.com/v1/payments
    Authorization: Basic MTAxMDpnYWJp
    
    {
      "Payment": {
        "MerchantTransactionID": "s2ptest_j8",
        "Amount": 100,
        "Currency": "BRL",
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "test payment",
        "StatementDescriptor": "card payment",
        "BillingAddress": {
          "City": "Iasi",
          "ZipCode": "7000-49",
          "State": "Iasi",
          "Street": "Sf Lazar",
          "StreetNumber": "37",
          "HouseNumber": "5A",
          "HouseExtension": "-",
          "Country": "BR"
        },
        "ShippingAddress": null,
        "Customer": {
          "FirstName":"John",
          "LastName":"Doe",
          "Email": "deny@deny.com",
          "SocialSecurityNumber": "00003456789"
        },
        "Card": {
          "HolderName": "John Doe",
          "Number": "4111111111111111",
          "ExpirationMonth": "02",
          "ExpirationYear": "2021",
          "SecurityCode": "312"
        },
        "Installments": 3,
        "Capture": false,
        "GenerateCreditCardToken": false,
        "PaymentTokenLifetime": 100,
        "3DSecure": false,
        "Language": "ro-RO",
        "SkinID": 200
      }
    }

    Response:

    HTTP/1.1 400 Bad Request
    Content-Type: application/json; charset=utf-8
    
    {
      "Payment": {
        "ID": 203371,
        "ClientIP": null,
        "SkinID": 200,
        "Created": "20180209082141",
        "MerchantTransactionID": "s2ptest_j8",
        "OriginatorTransactionID": null,
        "Amount": "100",
        "Currency": "BRL",
        "CapturedAmount": "0",
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "test payment",
        "StatementDescriptor": "card payment",
        "MethodID": 6,
        "MethodOptionID": null,
        "SiteID": 1010,
        "NotificationDateTime": null,
        "Customer": {
          "ID": 296,
          "MerchantCustomerID": null,
          "Email": "deny@deny.com",
          "FirstName": "John",
          "LastName": "Doe",
          "Gender": null,
          "SocialSecurityNumber": "00003456789",
          "Phone": null,
          "Company": null
          },
        "BillingAddress": {
          "ID": 9590,
          "City": "Iasi",
          "ZipCode": "7000-49",
          "State": "Iasi",
          "Street": "Sf Lazar",
          "StreetNumber": "37",
          "HouseNumber": "5A",
          "HouseExtension": "-",
          "Country": "BR"
          },
        "ShippingAddress": null,
        "Articles": null,
        "Card": {
          "HolderName": "John Doe",
          "Number": "Ends with 1111",
          "ExpirationMonth": "02",
          "ExpirationYear": "2019",
          "IssuingBankCountry": null
          },
        "CreditCardToken": null,
        "Status": {
          "ID": 4,
          "Info": "Failed",
          "Reasons": [
            {
              "Code": 116,
              "Info": "Transaction rejected by fraud provider"
              }
            ]
          },
        "MethodTransactionID": null,
        "PaymentTokenLifetime": null,
        "Capture": false,
        "RedirectURL": null,
        "3DSecure": false,
        "Fraud": {
          "Status": "Reject",
          "Score": 74,
          "Reason": "Transaction hit a velocity or rule threshold"
          },
        "Installments": 3
        }
    }

    Fraud Check – Payment Accepted

    Any credit card transaction will undergo a Fraud Check based on the provided parameters. The more parameters are provided, a more accurate precision the fraud check will have.

    The card payment is initiated and the Fraud Check system doesn’t detect any suspicious behavior or rule. The payment is accepted.

    Request:

    POST https://securetest.smart2pay.com/v1/payments
    Authorization: Basic MTAxMDpnYWJp
    
    {
      "Payment": {
        "MerchantTransactionID": "s2ptest_j9",
        "Amount": 100,
        "Currency": "BRL",
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "test payment",
        "StatementDescriptor": "card payment",
        "BillingAddress": {
          "City": "Iasi",
          "ZipCode": "7000-49",
          "State": "Iasi",
          "Street": "Sf Lazar",
          "StreetNumber": "37",
          "HouseNumber": "5A",
          "HouseExtension": "-",
          "Country": "BR"
        },
        "ShippingAddress": null,
        "Customer": {
          "FirstName":"John",
          "LastName":"Doe",
          "Email": "accept@accept.com",
          "SocialSecurityNumber": "00003456789"
        },
        "Card": {
          "HolderName": "John Doe",
          "Number": "4111111111111111",
          "ExpirationMonth": "02",
          "ExpirationYear": "2021",
          "SecurityCode": "312"
        },
        "Installments": 3,
        "Capture": false,
        "GenerateCreditCardToken": false,
        "PaymentTokenLifetime": 100,
        "3DSecure": false,
        "Language": "ro-RO",
        "SkinID": 200
      }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
      "Payment": {
        "ID": 203372,
        "ClientIP": null,
        "SkinID": 200,
        "Created": "20180209082328",
        "MerchantTransactionID": "s2ptest_j9",
        "OriginatorTransactionID": null,
        "Amount": "100",
        "Currency": "BRL",
        "CapturedAmount": "0",
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "test payment",
        "StatementDescriptor": "card payment",
        "MethodID": 6,
        "MethodOptionID": null,
        "SiteID": 1010,
        "NotificationDateTime": null,
        "Customer": {
          "ID": 297,
          "MerchantCustomerID": null,
          "Email": "accept@accept.com",
          "FirstName": "John",
          "LastName": "Doe",
          "Gender": null,
          "SocialSecurityNumber": "00003456789",
          "Phone": null,
          "Company": null
          },
        "BillingAddress": {
          "ID": 9590,
          "City": "Iasi",
          "ZipCode": "7000-49",
          "State": "Iasi",
          "Street": "Sf Lazar",
          "StreetNumber": "37",
          "HouseNumber": "5A",
          "HouseExtension": "-",
          "Country": "BR"
          },
        "ShippingAddress": null,
        "Articles": null,
        "Card": {
          "HolderName": "John Doe",
          "Number": "Ends with 1111",
          "ExpirationMonth": "02",
          "ExpirationYear": "2021",
          "IssuingBankCountry": null
          },
        "CreditCardToken": null,
        "Status": {
          "ID": 9,
          "Info": "Authorized",
          "Reasons": []
          },
        "MethodTransactionID": null,
        "PaymentTokenLifetime": null,
        "Capture": false,
        "RedirectURL": null,
        "3DSecure": false,
        "Fraud": {
          "Status": "Accept",
          "CheckMode": "CheckOnPreAuthorisation",
          "Score": 0,
          "Reason": "Always accept rule"
          },
        "Installments": 3
        }
    }

    Fraud Management

    We are providing you with a secure and reliable Fraud Management solution that will protect you from any fraudulent activity and keep you and your customers happy and safe. The Fraud Check system will verify and validate your transactions in order to detect any suspicious transactions and therefore reduce the risk of chargebacks.

    There are 3 possible scenarios when initiating a card payment with Fraud Check system on:

    • The card payment is initiated and the Fraud Check system doesn’t detect any suspicious behavior or rule. The payment is accepted. For more details checkout our section: Fraud Check – Payment Accepted.

    • The card payment is initiated and the Fraud Check system detects a suspicious behavior or rule. The payment is denied. For more details checkout our section: Fraud Check – Payment Denied.

    • The card payment is initiated and the Fraud Check system detects a possible suspicious behavior or rule. The payment is challenged by the fraud check provider. You can reject or accept the challenge. For more details checkout our section: Fraud Check – Payment Challenged.

    GPay Test Data

    For GPay payment method test data is available on demand. Please contact our support department at technicalsupport-s2p@nuvei.com for more information.

    GPay Payment Flow

    1. The customer enters his phone number and his email address.1 Enter customer details
    2. The customer receives a 6-digit verification code at the phone number that he previously added. He needs to enter the 6-digit code and click the Confirm button.1 SMS Verification
    3. The customer sees the payment details and he needs to choose the payment option in order to complete the payment.1 SMS Verification
    4. The customer verifies the payment information and the user details and completes the transaction by clicking on the Perform Payment button.1 Perform payment
    5. The customer receives a message that the payment has been completed correctly.1 Payment confirmation
    6. Upon completion of the payment flow, the customer is redirected to your ReturnUrl.1 Return page when the redirection status is a success

    Cards Peru Test Data

    For Cards Peru payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Cards Peru Payment Flow

    1. The customer enters his Email Address, Name and DNI. Please note that for Peru the Customer Social Security Number parameter consists of DNI. For more information about the DNI please click here.

      1 Enter customer details

    2. The customer enters his email address, name and card details: Card Number, CVC (CSC) and Expiration Date. He finalizes the payment by using the Pay button.

      1 Enter card details

    3. The customer receives a message that the payment has been completed correctly.

      1 Payment confirmation

    4. Upon completion of the payment flow the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is Processing

    Cards Colombia Test Data

    For Cards Colombia payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Cards Colombia Payment Flow

    1. The customer enters his Email Address, Name and CC. Please note that for Colombia the CustomerSocialSecurityNumber parameter consists of CC. For more information about the CC please click here.

      1 Enter customer details

    2. The customer enters his email address, name and card details: Card Number, CVC (CSC) and Expiration Date. He finalizes the payment by using the Pay button.

      1 Enter card details

    3. The customer receives a message that the payment has been completed correctly.

      1 Payment confirmation

    4. Upon completion of the payment flow the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is Processing

    Credit Cards Chile Test Data

    For Credit Cards Chile payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Credit Cards Chile Payment Flow

    1. The customer enters his Email Address, Name and RUT. Please note that for Chile the CustomerSocialSecurityNumber parameter consists of RUT. For more information about the RUT please click here.

      1 Enter customer details

    2. The customer enters his email address, name and card details: Card Number, CVC (CSC) and Expiration Date. He finalizes the payment by using the Pay button.

      1 Enter card details

    3. The customer receives a message that the payment has been completed correctly.

      1 Payment confirmation

    4. Upon completion of the payment flow the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is Processing

    WebPay Test Data

    For WebPay payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    WebPay Payment Flow

    1. The customer enters his Email Address, Name and RUT. Please note that for Chile the CustomerSocialSecurityNumber parameter consists of RUT. For more information about the RUT please click here.

      1 Enter customer details

    2. The customer needs to choose the preferred payment option and enter the necessary details in order to complete the payment.

      1 Payment details

    Servipag Test Data

    For Servipag payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Servipag Payment Flow

    1. The customer enters his Email Address, Name and RUT. Please note that for Chile the CustomerSocialSecurityNumber parameter consists of RUT. For more information about the RUT please click here.

      1 Enter customer details

    2. The customer receives the printable payment details. He needs to pay the exact amount at any Servipag branch in his area.

      Please take into consideration the expiration date printed on the ticket, in order to complete the payment before the ticket expires!

      1 Payment details

    3. Upon completion of the payment flow the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is Processing

    Cash Payment Colombia Test Data

    For Cash Payment Colombia payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Cash Payment Colombia Payment Flow

    1. The customer enters his Email Address, Name and CC, and chooses his preferred payment option from the given list. Please note that for Colombia the CustomerSocialSecurityNumber parameter consists of CC. For more information about the CC please click here.

      1 Enter customer details

    2. The customer sees the payment summary and chooses the payment option.

      1 Payment summary

    3. The customer needs to enter the necessary details in order to complete the transaction.

      1 Payment details

    4. The customer receives the voucher number and payment details. He needs to pay the exact amount at any Efecty, Davivienda, Baloto, Boleto Bancolombia branch.

      1 Payment details

    5. Upon completion of the payment flow the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is Processing

    PSE Colombia Test Data

    For PSE Colombia payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    PSE Colombia Payment Flow

    1. The customer enters his Email Address, Name and CC. Please note that for Colombia the CustomerSocialSecurityNumber parameter consists of CC. For more information about the CC please click here.

      1 Enter customer details

    2. The customer sees the payment summary and chooses the payment option.

      1 Payment summary

    3. The customer needs to enter the necessary details in order to complete the transaction.

      1 Payment details

    4. Upon completion of the payment flow the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is Processing

    Installment Payments

    Installment Payments are an easy and reliable way for the customer to pay in monthly installments. You only need to choose the number of installments in order for the customer to pay for the products / services.

    For installments number and availability per route and country please check with our support department at technicalsupport-s2p@nuvei.com.

    Request:

    POST https://securetest.smart2pay.com/v1/payments
    Authorization: Basic MTAxMDpnYWJp
    
    {
      "Payment": {
        "MerchantTransactionID": "s2ptest_j4",
        "Amount": "100",
        "Currency": "BRL",
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "test payment",
        "StatementDescriptor": "card payment",
        "BillingAddress": {
          "City": "Iasi",
          "ZipCode": "7000-49",
          "State": "Iasi",
          "Street": "Sf Lazar",
          "StreetNumber": "37",
          "HouseNumber": "5A",
          "HouseExtension": "-",
          "Country": "BR"
        },
        "ShippingAddress": null,
        "Customer": {
                "FirstName":"John",
                "LastName":"Doe",
                "Email": "testing2@test.com",
                "SocialSecurityNumber": "00003456789"
        },
        "Card": {
          "HolderName": "John Doe",
          "Number": "4111111111111111",
          "ExpirationMonth": "02",
          "ExpirationYear": "2019",
          "SecurityCode": "312"
        },
        "Installments": 3,
        "Capture": false,
        "Retry": false,
        "GenerateCreditCardToken": false,
        "PaymentTokenLifetime": 100,
        "3DSecure": false,
        "SkinID": 200
      }
    }

    Response:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    
    {
      "Payment": {
        "ID": 203313,
        "ClientIP": null,
        "SkinID": 200,
        "Created": "20180125152757",
        "MerchantTransactionID": "s2ptest_j4",
        "OriginatorTransactionID": null,
        "Amount": "100",
        "Currency": "BRL",
        "CapturedAmount": "0",
        "ReturnURL": "http://demo.smart2pay.com/redirect.php",
        "Description": "test payment",
        "StatementDescriptor": "card payment",
        "MethodID": 6,
        "MethodOptionID": null,
        "SiteID": 1010,
        "NotificationDateTime": null,
        "Customer": {
          "ID": 294,
          "MerchantCustomerID": null,
          "Email": "testing2@test.com",
          "FirstName": "John",
          "LastName": "Doe",
          "Gender": null,
          "SocialSecurityNumber": "00003456789",
          "Phone": null,
          "Company": null
          },
        "BillingAddress": {
          "ID": 9590,
          "City": "Iasi",
          "ZipCode": "7000-49",
          "State": "Iasi",
          "Street": "Sf Lazar",
          "StreetNumber": "37",
          "HouseNumber": "5A",
          "HouseExtension": "-",
          "Country": "BR"
          },
        "ShippingAddress": null,
        "Articles": null,
        "Card": {
          "HolderName": "John Doe",
          "Number": "Ends with 1111",
          "ExpirationMonth": "02",
          "ExpirationYear": "2019"
          },
        "CreditCardToken": null,
        "Status": {
          "ID": 9,
          "Info": "Authorized",
          "Reasons": []
          },
        "MethodTransactionID": null,
        "PaymentTokenLifetime": null,
        "Capture": false,
        "Retry": false,
        "RedirectURL": null,
        "3DSecure": false,
        "Fraud": null,
        "Installments": 3
        }
    }

    Cards Mexico Test Data

    For Cards Mexico payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Cards Mexico Payment Flow

    1. The customer enters his Email Address, Name and CURP/RFC/IFE. Please note that for Mexico the Customer Social Security Number parameter consists of CURP/RFC/IFE. For more information about the CURP/RFC/IFE please click here.

      1 Enter customer details

    2. The customer enters his email address, name and card details: Card Number, CVC (CSC) and Expiration Date. He finalizes the payment by using the Pay button.

      1 Enter card details

    3. The customer receives a message that the payment has been completed correctly.

      1 Payment confirmation

    4. Upon completion of the payment flow the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is Processing

    Bank Transfer Peru Test Data

    For Bank Transfer Peru payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Bank Transfer Peru Payment Flow

    1. The customer enters his Email Address, Name and DNI. Please note that for Peru the Customer Social Security Number parameter consists of DNI. For more information about the DNI please click here.

      1 Enter customer details

    2. The customer receives the printable payment details in order to complete the payment.

      1 Payment details

    3. Upon completion of the payment flow the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is Processing

    Cash Payment Peru Test Data

    For Cash Payment Peru payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Cash Payment Peru Payment Flow

    1. The customer enters his Email Address, Name and DNI.
      Please note that for Peru the Customer Social Security Number parameter consists of DNI. For more information about the DNI please click here.

      1 Enter customer details

    2. The customer receives the printable payment details in order to complete the payment.

      1 Payment details

    3. Upon completion of the payment flow the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is Processing

    SPEI Test Data

    For SPEI payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    SPEI Payment Flow

    1. The customer enters his Email Address, Name and CURP/RFC/IFE.
      Please note that for Mexico the Customer Social Security Number parameter consists of CURP/RFC/IFE. For more information about the CURP/RFC/IFE please click here.

      1 Enter customer details

    2. The customer receives the printable payment details in order to complete the payment.

      1 Enter account details

    3. Upon completion of the payment flow the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is Processing

    Oxxo Test Data

    For Oxxo payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Oxxo Payment Flow

    1. The customer enters his Email Address, Name and CURP/RFC/IFE.
      Please note that for Mexico the Customer Social Security Number parameter consists of CURP/RFC/IFE. For more information about the CURP/RFC/IFE please click here.

      1 Enter customer details

    2. The customer receives the printable voucher. In order to complete the payment, he needs to print the voucher and present it to any Oxxo store in his area to make the payment.

      1 Enter account details

    3. Upon completion of the payment flow the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is Processing

    Bank Transfer Mexico Test Data

    For Bank Transfer Mexico payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Bank Transfer Mexico Payment Flow

    1. The customer enters his Email Address, Name and CURP/RFC/IFE, and chooses his preferred payment option from the given list.
      Please note that for Mexico the Customer Social Security Number parameter consists of CURP/RFC/IFE. For more information about the CURP/RFC/IFE please click here.

      1 Enter customer details

    2. The customer can print the payment details and complete the payment in the next 48 hours at the corresponding bank. Payment confirmation may take between 24 and 48 business hours.

      1 Payment details

    3. Upon completion of the payment flow the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is Processing

    Online Bank Transfer Brazil Test Data

    For Online Bank Transfer Brazil payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Online Bank Transfer Brazil Payment Flow

    1. The customer enters his Email Address, Name and CPF/CNPJ, and chooses his preferred payment option from the given list. Please note that for Brazil the Customer Social Security Number parameter consists of CPF/CNPJ. For more information about the CPF/CNPJ please click here.

      1 Enter customer details

    2. The customer logs in to his account by entering his login details in order to make the payment.

      1 Voucher

    3. Upon completion of the payment flow the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is Processing

    Boleto Brazil Test Data

    For Boleto Brazil payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Boleto Brazil Payment Flow

    1. The customer enters his Email Address, Name and CPF/CNPJ.
      Please note that for Brazil the Customer Social Security Number parameter consists of CPF/CNPJ. For more information about the CPF/CNPJ please click here.

      1 Enter customer details

    2. The customer receives the Boleto with all the necessary payment details. In order to complete the payment, he needs to print the Boleto and go to a physical bank branch in his area and pay with cash, use online banking, or simply go to an ATM machine.

      1 Print Boleto

    3. Upon completion of the payment flow the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is Processing

    Credit Cards Brazil Test Data

    For Credit Cards Brazil payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Credit Cards Brazil Payment Flow

    1. The customer enters his Email Address, Name and CPF / CNPJ.
      Please note that for Brazil the Customer Social Security Number parameter consists of CPF / CNPJ. For more information about the CPF / CNPJ please click here.

      1 Enter customer details

    2. The customer enters his name and card details: Card Number, CVC (CSC) and Expiration Date. He finalizes the payment by using the Pay button.

      1 Enter card details

    3. Upon completion of the payment flow the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is Processing

    Cards LATAM Test Data

    For Cards LATAM payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Cards LATAM Payment Flow

    1. The customer enters his Email Address, Name and his Customer Social Security Number, and chooses his preferred payment option from the given list. See below, depending on the selected country, the values for the CustomerSocialSecurityNumber parameter.

      Country Customer Social Security Number
      Argentina For Argentina the CustomerSocialSecurityNumber parameter consists of DNI. For more information about the DNI please click here.
      Brazil For Brazil the CustomerSocialSecurityNumber parameter consists of CPF/CNPJ. For more information about the CPF/CNPJ please click here.
      Chile For Chile the CustomerSocialSecurityNumber parameter consists of RUT. For more information about the RUT please click here.
      Colombia For Colombia the CustomerSocialSecurityNumber parameter consists of CC. For more information about the CC please click here.
      Mexico For Mexico the CustomerSocialSecurityNumber parameter consists of CURP/RFC/IFE. For more information about the CURP/RFC/IFE please click here.
      Uruguay For Uruguay the CustomerSocialSecurityNumber parameter consists of CI. For more information about the CI please click here.
      Peru For Peru the CustomerSocialSecurityNumber parameter consists of DNI. For more information about the DNI please click here.

      1 Enter customer details

    2. The customer enters his name and card details: Card Number, CVC (CSC) and Expiration Date. He finalizes the payment by using the Pay button.

      1 Voucher

    3. Upon completion of the payment flow the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is Success

    Pago Fácil Test Data

    For Pago Fácil payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Pago Fácil Payment Flow

    1. The customer enters his Email Address, Name and National Identity Document (DNI), and chooses his preferred payment option from the given list. Please note that for Argentina the Customer Social Security Number parameter consists of DNI. For more information about the DNI please click here.

      1 Enter customer details

    2. The customer receives the printable voucher. In order to complete the payment, he needs to print the voucher and present it to any Pago Fácil store in his area to make the payment.

      1 Enter account details

    3. Upon completion of the payment flow the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is Processing

    Rapi Pago Test Data

    For Rapi Pago payment method there aren’t any test data available, but you can see how it works with the payment flow given below.

    Rapi Pago Payment Flow

    1. The customer enters his Email Address, Name and National Identity Document (DNI), and chooses his preferred payment option from the given list. Please note that for Argentina the Customer Social Security Number parameter consists of DNI. For more information about the DNI please click here.

      1 Enter customer details

    2. The customer receives the printable voucher. In order to complete the payment, he needs to print the voucher and present it to any Rapi Pago store in his area to make the payment.

      1 Voucher

    3. Upon completion of the payment flow the customer is redirected back to your ReturnURL.

      1 Return page when the redirection status is Processing

    Capture Scenarios for Cards Russia

    Scenario Status / Return Code Description Final

    The transaction has been captured.

    Only payments with “Authorized” status can be captured.
    Status: 2 Success (Captured) Yes

    The payment will be sent for capturing.

    No further action from you is required. Do not deliver the goods until the Captured notification is received.
    Status: 13 CaptureRequested No

    Retry Capture.

    This happens when the request timeouts at Provider
    Return Code: 157 Unable to capture transaction No

    For a complete list of all the possible Return Code IDs go to our section GlobalPay Return Codes.

    See the request – response examples for the above possible scenarios to a capture request:

      • Success Status(Captured)

        A payment can only be captured if it has an Authorized status.

        A 200 HTTP response (OK) is returned if the request was completed successfully.

        Request:

        POST: https://paytest.smart2pay.com/v1/payments/3434635/capture
        Authorization: Basic MzAxNTE6V05ydTJ5WnJpR2RtNVVMZWt4dFM4cHprUXNRSmdYYTZBZnlnT3FXZXcvNlRBYzNYK1A=

        Response:

        HTTP/1.1 200 OK
        Content-Type: application/json; charset=utf-8
        
        {
            "Payment": {
                "ID": 3434635,
                "SkinID": null,
                "ClientIP": null,
                "Created": "20171124134932",
                "MerchantTransactionID": "CARDSAUTHORIZED1",
                "OriginatorTransactionID": null,
                "Amount": "100",
                "Currency": "RUB",
                "ReturnURL": "http://demo.smart2pay.com/redirect.php",
                "Description": null,
                "MethodID": 1045,
                "MethodOptionID": null,
                "IncludeMethodIDs": null,
                "ExcludeMethodIDs": null,
                "PrioritizeMethodIDs": null,
                "SiteID": 30151,
                "NotificationDateTime": "20171124135556",
                "Customer": null,
                "BillingAddress": {
                    "ID": 1866,
                    "City": null,
                    "ZipCode": null,
                    "State": null,
                    "Street": null,
                    "StreetNumber": null,
                    "HouseNumber": null,
                    "HouseExtension": null,
                    "Country": "RU"
                },
                "ShippingAddress": null,
                "Articles": null,
                "Details": null,
                "ReferenceDetails": null,
                "CustomParameters": null,
                "PreapprovalID": null,
                "Status": {
                    "ID": 2,
                    "Info": "Success",
                    "Reasons": null
                },
                "MethodTransactionID": null,
                "TokenLifetime": 10,
                "Capture": null,
                "PreapprovalDetails": null,
                "RedirectURL": "https://apitest.smart2pay.com/Home?PaymentToken=4EB6DAA3ECC72484DB00CA0464F9E03B.3434635"
            }
        }

      • CaptureRequested Status

        The payment will be sent for capturing. No further action from you is required. Do not deliver the goods until the Captured notification is received.

        Request:

        POST: https://paytest.smart2pay.com/v1/payments/82278677/capture
        Authorization: Basic MzAxNTE6V05ydTJ5WnJpR2RtNVVMZWt4dFM4cHprUXNRSmdYYTZBZnlnT3FXZXcvNlRBYzNYK1A=

        Response:

        HTTP/1.1 200 OK
        Content-Type: application/json; charset=utf-8
        
        {
          "Payment": {
            "ID": 82269840,
            "SkinID": null,
            "ClientIP": null,
            "Created": "20171124100542",
            "MerchantTransactionID": "p000043_5043",
            "OriginatorTransactionID": null,
            "Amount": "196000",
            "Currency": "RUB",
            "ReturnURL": "https://ecomm.sella.it/pagam/smart2payok.aspx?ID=H4ZJ72E92YLULW41272248194",
            "Description": null,
            "MethodID": 1045,
            "MethodOptionID": null,
            "IncludeMethodIDs": null,
            "ExcludeMethodIDs": null,
            "PrioritizeMethodIDs": null,
            "SiteID": 31199,
            "NotificationDateTime": "20171124111957",
            "Customer": {
              "ID": 726132,
              "MerchantCustomerID": null,
              "Email": "irinamal3001@gmail.com",
              "FirstName": null,
              "LastName": null,
              "Gender": null,
              "SocialSecurityNumber": null,
              "Phone": null,
              "Company": null,
              "DateOfBirth": null
            },
            "BillingAddress": null,
            "ShippingAddress": null,
            "Articles": null,
            "Details": null,
            "ReferenceDetails": null,
            "CustomParameters": null,
            "PreapprovalID": null,
            "Status": {
              "ID": 13,
              "Info": "CaptureRequested",
              "Reasons": null
            },
            "MethodTransactionID": "2000892753401",
            "TokenLifetime": 5,
            "Capture": null,
            "PreapprovalDetails": null,
            "RedirectURL": "https://globalapi.smart2pay.com/Home?PaymentToken=5552FC1D98E5B8F7064173A36D437BE6.82269840"
          }
        }

      • Return Code: 157 – Unable to capture transaction

        The transaction could not be captured. Retry Capture. This happens when the request timeouts at Provider.

        Request:

        POST: https://paytest.smart2pay.com/v1/payments/3434635/capture
        Authorization: Basic MzAxNTE6V05ydTJ5WnJpR2RtNVVMZWt4dFM4cHprUXNRSmdYYTZBZnlnT3FXZXcvNlRBYzNYK1A=

        Response:

        HTTP/1.1 400 Bad Request
        Content-Type: application/json; charset=utf-8{
            "Payment": {
                "ID": 3434635,
                "SkinID": null,
                "ClientIP": null,
                "Created": "20171124134932",
                "MerchantTransactionID": "CARDSAUTHORIZED1",
                "OriginatorTransactionID": null,
                "Amount": "100",
                "Currency": "RUB",
                "ReturnURL": "http://demo.smart2pay.com/redirect.php",
                "Description": "test smart2pay",
                "MethodID": 1045,
                "MethodOptionID": null,
                "IncludeMethodIDs": null,
                "ExcludeMethodIDs": null,
                "PrioritizeMethodIDs": null,
                "SiteID": 30151,
                "NotificationDateTime": "20171124135020",
                "Customer": null,
                "BillingAddress": null,
                "ShippingAddress": null,
                "Articles": null,
                "Details": null,
                "ReferenceDetails": null,
                "CustomParameters": null,
                "PreapprovalID": null,
                "Status": {
                    "ID": 9,
                    "Info": "Authorized",
                    "Reasons": [
                        {
                            "Code": "157",
                            "Info": "Unable to capture transaction"
                        }
                    ]
                },
                "MethodTransactionID": null,
                "TokenLifetime": null,
                "Capture": null,
                "PreapprovalDetails": null,
                "RedirectURL": null
            }
        }

    Capture Scenarios for Klarna Payments

    Scenario Status / Return Code Description
    The transaction has been fully captured.

    Only payments with “Authorized” status can be captured.
    Status: 2 Success
    The payment has been partially captured.

    Only payments with “Authorized” status can be captured.
    Status: 35 Partially Captured
    Retry Capture.

    This happens when the request timeouts at Provider; a new capture request has to be initiated.
    Return Code: 157 Unable to capture transaction
    The transaction could not be captured.

    The transaction is not in an Authorized status.
    Return Code: 17 Payment is invalid

    For a complete list of all the possible Return Code IDs go to our section GlobalPay Return Codes.

    See the request – response examples for the above possible scenarios:

    Success Status

    A payment can only be captured if it has an Authorized status. Once the payment has an Authorized status, you can capture either the full amount or a partial amount of the initial authorized amount for the transaction.

    A 200 HTTP response (OK) is returned if the request was completed successfully.

    Full capture means you capture the entire authorized amount for the initial transaction.

    Request:

    POST: https://paytest.smart2pay.com/v1/payments/8061531/capture
    Authorization: Basic MzAwNzc6ZXJ2YVJNY1VqcGJXd0dhWit0ayswWGdNdUJDaVRuS2dzSDVCUUJPcUk2a3VFb2FKVnI=
    

    Response:

    HTTP/1.1 200 OK
    Content-Type: application/json; charset=utf-8
    
    {
        "Payment": {
            "ID": 8061531,
            "SkinID": null,
            "ClientIP": null,
            "Created": "20250217102607",
            "MerchantTransactionID": "XYZtest1739787966",
            "OriginatorTransactionID": null,
            "Amount": "2000",
            "Currency": "EUR",
            "CapturedAmount": "2000",
            "ReturnURL": "http://demo2.smart2pay.com/redirect.php",
            "ReturnURLSuccess": null,
            "ReturnURLFailure": null,
            "ReturnURLCancel": null,
            "ReturnURLProcessing": null,
            "Description": null,
            "MethodID": 1078,
            "MethodOptionID": null,
            "MethodOptionIdString": null,
            "BankName": null,
            "IncludeMethodIDs": null,
            "ExcludeMethodIDs": null,
            "PrioritizeMethodIDs": null,
            "SiteID": 30563,
            "NotificationDateTime": "20250217102656",
            "Customer": null,
            "BillingAddress": {
                "ID": 18658,
                "City": "Wien",
                "ZipCode": "1060",
                "State": null,
                "Street": "Mariahilfer Strasse 10",
                "StreetNumber": null,
                "HouseNumber": null,
                "HouseExtension": null,
                "Country": "AT"
            },
            "ShippingAddress": {
                "ID": 18658,
                "City": "Wien",
                "ZipCode": "1060",
                "State": null,
                "Street": "Mariahilfer Strasse 10",
                "StreetNumber": null,
                "HouseNumber": null,
                "HouseExtension": null,
                "Country": "AT"
            },
            "Articles": [
                {
                    "MerchantArticleID": "1231",
                    "Name": "TEST",
                    "Quantity": 1,
                    "Price": "2000",
                    "VAT": "0",
                    "Discount": "0",
                    "Type": "5",
                    "TaxType": 0,
                    "DiscountValue": "0"
                }
            ],
            "Details": null,
            "ReferenceDetails": null,
            "CustomParameters": null,
            "PreapprovalID": null,
            "Status": {
                "ID": 2,
                "Info": "Success",
                "Reasons": null
            },
            "Fraud": null,
            "MethodTransactionID": "a7d087d9-2cfb-4f7f-b767-5d014141aab3",
            "OriginalMerchantTID": null,
            "Unknown": false,
            "TokenLifetime": 10,
            "Capture": null,
            "PreapprovalDetails": null,
            "RedirectURL": "https://webapp-apm-globalpay-api-qa.nuvei.com/Home?PaymentToken=8098486DFB91DDC9BBE2B45609F3DA3F.8061531",
            "Splits": null
        }
    }

    Partially Captured Status

    • Partial capture means you have the possibility to capture a smaller amount than the one from the initial authorized transaction. Partial capture is used when you have sent at least part of the order to the consumer and want to capture the amount for the item(s) that have been shipped. You can perform only one partial capture for an authorized transaction with the limitation that the amount of the partial capture to be smaller or equal than the initial authorized amount. The remaining amount that has not been captured will be returned to the client’s account. There are 3 possibilities to partially capture a payment:
      1. Specify only the captured amount parameter in the query string, in order to partially capture the payment, like in the below example:

        Request:

        POST: https://paytest.smart2pay.com/v1/payments/8061531/capture?amount=50
        Authorization: Basic MzAwNzc6ZXJ2YVJNY1VqcGJXd0dhWit0ayswWGdNdUJDaVRuS2dzSDVCUUJPcUk2a3VFb2FKVnI=
        

        Response:

        HTTP/1.1 200 OK
        Content-Type: application/json; charset=utf-8
        
        {
            "Payment": {
                "ID": 8061528,
                "SkinID": null,
                "ClientIP": null,
                "Created": "20250217101602",
                "MerchantTransactionID": "XYZtest1739787362",
                "OriginatorTransactionID": null,
                "Amount": "2000",
                "Currency": "EUR",
                "CapturedAmount": "100",
                "ReturnURL": "http://demo2.smart2pay.com/redirect.php",
                "ReturnURLSuccess": null,
                "ReturnURLFailure": null,
                "ReturnURLCancel": null,
                "ReturnURLProcessing": null,
                "Description": null,
                "MethodID": 1078,
                "MethodOptionID": null,
                "MethodOptionIdString": null,
                "BankName": null,
                "IncludeMethodIDs": null,
                "ExcludeMethodIDs": null,
                "PrioritizeMethodIDs": null,
                "SiteID": 30563,
                "NotificationDateTime": "20250217101745",
                "Customer": null,
                "BillingAddress": {
                    "ID": 18658,
                    "City": "Wien",
                    "ZipCode": "1060",
                    "State": null,
                    "Street": "Mariahilfer Strasse 10",
                    "StreetNumber": null,
                    "HouseNumber": null,
                    "HouseExtension": null,
                    "Country": "AT"
                },
                "ShippingAddress": {
                    "ID": 18658,
                    "City": "Wien",
                    "ZipCode": "1060",
                    "State": null,
                    "Street": "Mariahilfer Strasse 10",
                    "StreetNumber": null,
                    "HouseNumber": null,
                    "HouseExtension": null,
                    "Country": "AT"
                },
                "Articles": [
                    {
                        "MerchantArticleID": "1231",
                        "Name": "TEST",
                        "Quantity": 1,
                        "Price": "2000",
                        "VAT": "0",
                        "Discount": "0",
                        "Type": "5",
                        "TaxType": 0,
                        "DiscountValue": "0"
                    }
                ],
                "Details": null,
                "ReferenceDetails": null,
                "CustomParameters": null,
                "PreapprovalID": null,
                "Status": {
                    "ID": 35,
                    "Info": "PartiallyCaptured",
                    "Reasons": null
                },
                "Fraud": null,
                "MethodTransactionID": "aa2f6a99-35a0-434e-bba4-6fb0a228a0ea",
                "OriginalMerchantTID": null,
                "Unknown": false,
                "TokenLifetime": 10,
                "Capture": null,
                "PreapprovalDetails": null,
                "RedirectURL": "https://webapp-apm-globalpay-api-qa.nuvei.com/Home?PaymentToken=AA7E73E1C498B38E6400E"
            }
        }

      2. Specify the captured amount parameter in the query string and send the appropriate details for the Articles object together with the Shipping and Customer information, like in the below example:

        Request:

        POST: https://paytest.smart2pay.com/v1/payments/8061525/capture?amount=50
        Authorization: Basic MzAwNzc6ZXJ2YVJNY1VqcGJXd0dhWit0ayswWGdNdUJDaVRuS2dzSDVCUUJPcUk2a3VFb2FKVnI=
        
        HTTP/1.1 200 OK
        Content-Type: application/json; charset=utf-8
        
        {
          "Payment": {
            "Articles": [
              {
              "MerchantArticleID": "1231",
              "Quantity": 1
              }
            ]
          }
        }

        Response:

        HTTP/1.1 200 OK
        Content-Type: application/json; charset=utf-8
        
        {
            "Payment": {
                "ID": 8061528,
                "SkinID": null,
                "ClientIP": null,
                "Created": "20250217101602",
                "MerchantTransactionID": "XYZtest1739787362",
                "OriginatorTransactionID": null,
                "Amount": "2000",
                "Currency": "EUR",
                "CapturedAmount": "100",
                "ReturnURL": "http://demo2.smart2pay.com/redirect.php",
                "ReturnURLSuccess": null,
                "ReturnURLFailure": null,
                "ReturnURLCancel": null,
                "ReturnURLProcessing": null,
                "Description": null,
                "MethodID": 1078,
                "MethodOptionID": null,
                "MethodOptionIdString": null,
                "BankName": null,
                "IncludeMethodIDs": null,
                "ExcludeMethodIDs": null,
                "PrioritizeMethodIDs": null,
                "SiteID": 30563,
                "NotificationDateTime": "20250217101745",
                "Customer": null,
                "BillingAddress": {
                    "ID": 18658,
                    "City": "Wien",
                    "ZipCode": "1060",
                    "State": null,
                    "Street": "Mariahilfer Strasse 10",
                    "StreetNumber": null,
                    "HouseNumber": null,
                    "HouseExtension": null,
                    "Country": "AT"
                },
                "ShippingAddress": {
                    "ID": 18658,
                    "City": "Wien",
                    "ZipCode": "1060",
                    "State": null,
                    "Street": "Mariahilfer Strasse 10",
                    "StreetNumber": null,
                    "HouseNumber": null,
                    "HouseExtension": null,
                    "Country": "AT"
                },
                "Articles": [
                    {
                        "MerchantArticleID": "1231",
                        "Name": "TEST",
                        "Quantity": 1,
                        "Price": "2000",
                        "VAT": "0",
                        "Discount": "0",
                        "Type": "5",
                        "TaxType": 0,
                        "DiscountValue": "0"
                    }
                ],
                "Details": null,
                "ReferenceDetails": null,
                "CustomParameters": null,
                "PreapprovalID": null,
                "Status": {
                    "ID": 35,
                    "Info": "PartiallyCaptured",
                    "Reasons": null
                },
                "Fraud": null,
                "MethodTransactionID": "aa2f6a99-35a0-434e-bba4-6fb0a228a0ea",
                "OriginalMerchantTID": null,
                "Unknown": false,
                "TokenLifetime": 10,
                "Capture": null,
                "PreapprovalDetails": null,
                "RedirectURL": "https://webapp-apm-globalpay-api-qa.nuvei.com/Home?PaymentToken=AA7E73E1C498B38E6400E"
            }
        }

    • Return Code: 157 – Unable to capture transaction. The transaction could not be captured. Retry Capture. This happens when the request timeouts at Provider.

      Request:

      POST: https://paytest.smart2pay.com/v1/payments/3434068/capture
      Authorization: Basic MzAwNzc6ZXJ2YVJNY1VqcGJXd0dhWit0ayswWGdNdUJDaVRuS2dzSDVCUUJPcUk2a3VFb2FKVnI=
      

      Response:

      HTTP/1.1 400 Bad Request
      Content-Type: application/json; charset=utf-8
      
      {
          "Payment": {
              "ID": 3434068,
              "SkinID": null,
              "ClientIP": null,
              "Created": "20171123141730",
              "MerchantTransactionID": "testpaymentauthorized",
              "OriginatorTransactionID": null,
              "Amount": "900",
              "Currency": "DKK",
              "CapturedAmount": null,
              "ReturnURL": "http://demo.smart2pay.com/redirect.php",
              "Description": "test smart2pay",
              "MethodID": 1078,
              "MethodOptionID": null,
              "IncludeMethodIDs": null,
              "ExcludeMethodIDs": null,
              "PrioritizeMethodIDs": null,
              "SiteID": 30151,
              "NotificationDateTime": "20171123141847",
              "Customer": null,
              "BillingAddress": null,
              "ShippingAddress": null,
              "Articles": null,
              "Details": null,
              "ReferenceDetails": null,
              "CustomParameters": null,
              "PreapprovalID": null,
              "Status": {
                  "ID": 9,
                  "Info": "Authorized",
                  "Reasons": [
                      {
                          "Code": 157,
                          "Info": "Unable to capture transaction"
                      }
                  ]
              },
              "MethodTransactionID": null,
              "TokenLifetime": null,
              "Capture": null,
              "PreapprovalDetails": null,
              "RedirectURL": null
          }
      }

    • Return Code: 17 – Payment is invalid. The transaction could not be captured. The transaction is not in an Authorized status. You can receive this response when the payment you want to Capture is not Authorized or when the payment has already been Captured.

      Request:

      POST: https://paytest.smart2pay.com/v1/payments/8061512/capture
      Authorization: Basic MzAwNzc6ZXJ2YVJNY1VqcGJXd0dhWit0ayswWGdNdUJDaVRuS2dzSDVCUUJPcUk2a3VFb2FKVnI=
      

      Response:

      HTTP/1.1 400 Bad Request
      Content-Type: application/json; charset=utf-8{
          "Payment": {
              "ID": 8061512,
              "SkinID": null,
              "ClientIP": null,
              "Created": "20250217081415",
              "MerchantTransactionID": null,
              "OriginatorTransactionID": null,
              "Amount": null,
              "Currency": null,
              "CapturedAmount": null,
              "ReturnURL": null,
              "ReturnURLSuccess": null,
              "ReturnURLFailure": null,
              "ReturnURLCancel": null,
              "ReturnURLProcessing": null,
              "Description": null,
              "MethodID": 1078,
              "MethodOptionID": null,
              "MethodOptionIdString": null,
              "BankName": null,
              "IncludeMethodIDs": null,
              "ExcludeMethodIDs": null,
              "PrioritizeMethodIDs": null,
              "SiteID": 30563,
              "NotificationDateTime": "20250217084539",
              "Customer": null,
              "BillingAddress": null,
              "ShippingAddress": null,
              "Articles": null,
              "Details": null,
              "ReferenceDetails": null,
              "CustomParameters": null,
              "PreapprovalID": null,
              "Status": {
                  "ID": 2,
                  "Info": "Success",
                  "Reasons": [
                      {
                          "Code": "17",
                          "Info": "Payment is invalid - 8061512"
                      }
                  ]
              },
              "Fraud": null,
              "MethodTransactionID": null,
              "OriginalMerchantTID": null,
              "Unknown": false,
              "TokenLifetime": null,
              "Capture": null,
              "PreapprovalDetails": null,
              "RedirectURL": null,
              "Splits": null
          }
      }

    Capture Scenarios for Cards

    Scenario Status ID Description

    The transaction has been fully captured.

    Only payments with “Authorized” status can be captured. The goods can be delivered.
    Status: 11 Captured

    The payment has been partially captured.

    Only payments with “Authorized” status can be captured.
    Status: 35 Partially Captured

    Queued For Capturing

    The payment will be sent automatically for capturing. No further action from you is required. The goods can be delivered.
    Status: 33 QueuedForCapturing

    Capture Requested

    The payment was successfully authorized and the capture request was also sent to the provider. In the initial request the capture parameter is sent to true so our service will handle the capturing of the payment automatically. The goods can be delivered.
    Status: 13 CaptureRequested

    For a complete list of all the possible Status Codes go to our section Cards Processing Status Codes.

    In order for you to test different scenarios go to our Testing Requirements area where we have provided a range of amounts that you can use to check all the transactional statuses.

    See the request – response examples for the above possible scenarios:

    • Capture Status

      A payment can only be captured if it has an Authorized status. The Authorized status can only be obtained for direct card payments initiated with Capture parameter set to false.

      Once the payment has an Authorized status, you can capture either a partial amount or the full amount of the initial authorized amount for the transaction.

      Full capture means you capture the entire authorized amount for the initial transaction.

      A 200 HTTP response (OK) is returned if the request was completed successfully.

      Request:

      POST https://securetest.smart2pay.com/v1/payments/202956/capture
      Authorization: Basic MTAxMDpnYWJp

      Response:

      HTTP/1.1 200 OK
      Content-Type: application/json; charset=utf-8
      
      {
        "Payment": {
          "ID": 202956,
          "ClientIP": null,
          "SkinID": null,
          "Created": "20171124081444",
          "MerchantTransactionID": "s2ptest_g2",
          "OriginatorTransactionID": null,
          "Amount": "2000",
          "Currency": "EUR",
          "CapturedAmount": "2000",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "Description": "payment product",
          "StatementDescriptor": "bank statement message",
          "MethodID": 6,
          "MethodOptionID": null,
          "SiteID": 1010,
          "NotificationDateTime": null,
          "Customer": {
            "ID": 115,
            "MerchantCustomerID": "null",
            "Email": "customer@test.com",
            "FirstName": "John",
            "LastName": "Doe",
            "Gender": "1",
            "SocialSecurityNumber": "45908-28324",
            "Phone": "0744-783322",
            "Company": "S2P"
          },
          "BillingAddress": {
            "ID": 253,
            "City": "Iasi",
            "ZipCode": "7000-49",
            "State": "Iasi",
            "Street": "Sf Lazar",
            "StreetNumber": "37",
            "HouseNumber": "5A",
            "HouseExtension": "-",
            "Country": "RO"
          },
          "ShippingAddress": {
            "ID": 87,
            "City": "Iasi",
            "ZipCode": "700049",
            "State": "Iasi",
            "Street": "Sf Lazar",
            "StreetNumber": "37",
            "HouseNumber": "-",
            "HouseExtension": "-",
            "Country": "RO"
          },
          "Articles": null,
          "Card": {
            "HolderName": "John Doe",
            "Number": "411111******1111",
            "ExpirationMonth": "2",
            "ExpirationYear": "2018"
          },
          "CreditCardToken": null,
          "Status": {
            "ID": 11,
            "Info": "Captured",
            "Reasons": []
          },
          "MethodTransactionID": null,
          "PaymentTokenLifetime": null,
          "Capture": false,
          "Retry": true,
          "RedirectURL": null,
          "3DSecure": false,
          "Fraud": null
        }
      }

    • PartiallyCaptured Status

      Partial capture means you have the possibility to capture a smaller amount than the one from the initial authorized transaction.

      You can perform only one partial capture for an authorized transaction with the limitation that the amount of the partial capture to be smaller or equal than the initial authorized amount.

      You need to specify the captured amount parameter in the query string, in order to partially capture a payment.

      Request:

      POST https://securetest.smart2pay.com/v1/payments/202957/capture?amount=1000
      Authorization: Basic MTAxMDpnYWJp

      Response:

      HTTP/1.1 200 OK
      Content-Type: application/json; charset=utf-8
      
      {
        "Payment": {
          "ID": 202957,
          "ClientIP": null,
          "SkinID": null,
          "Created": "20171124081747",
          "MerchantTransactionID": "s2ptest_g3",
          "OriginatorTransactionID": null,
          "Amount": "2000",
          "Currency": "EUR",
          "CapturedAmount": "1000",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "Description": "payment product",
          "StatementDescriptor": "bank statement message",
          "MethodID": 6,
          "MethodOptionID": null,
          "SiteID": 1010,
          "NotificationDateTime": null,
          "Customer": {
            "ID": 115,
            "MerchantCustomerID": "null",
            "Email": "customer@test.com",
            "FirstName": "John",
            "LastName": "Doe",
            "Gender": "1",
            "SocialSecurityNumber": "45908-28324",
            "Phone": "0744-783322",
            "Company": "S2P"
          },
          "BillingAddress": {
            "ID": 253,
            "City": "Iasi",
            "ZipCode": "7000-49",
            "State": "Iasi",
            "Street": "Sf Lazar",
            "StreetNumber": "37",
            "HouseNumber": "5A",
            "HouseExtension": "-",
            "Country": "RO"
          },
          "ShippingAddress": {
            "ID": 87,
            "City": "Iasi",
            "ZipCode": "700049",
            "State": "Iasi",
            "Street": "Sf Lazar",
            "StreetNumber": "37",
            "HouseNumber": "-",
            "HouseExtension": "-",
            "Country": "RO"
          },
          "Articles": null,
          "Card": {
            "HolderName": "John Doe",
            "Number": "411111******1111",
            "ExpirationMonth": "2",
            "ExpirationYear": "2018"
          },
          "CreditCardToken": null,
          "Status": {
            "ID": 35,
            "Info": "PartiallyCaptured",
            "Reasons": []
          },
          "MethodTransactionID": null,
          "PaymentTokenLifetime": null,
          "Capture": false,
          "Retry": true,
          "RedirectURL": null,
          "3DSecure": false,
          "Fraud": null
        }
      }

    • QueuedForCapturing Status

      Using the test amount 10002, if you set capture flag to true it will return status QueuedForCapturing with return code: 5288: “Capture failed but will retry again later”.

      Request:

      POST https://securetest.smart2pay.com/v1/payments
      Authorization: Basic MTAxMDpnYWJp
      
      {
        "Payment": {
          "MerchantTransactionID": "s2ptest_g4",
          "Amount": 10002,
          "Currency": "EUR",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "Description": "payment product",
          "StatementDescriptor": "bank statement message",
          "BillingAddress": {
            "City": "Iasi",
            "ZipCode": "7000-49",
            "State": "Iasi",
            "Street": "Sf Lazar",
            "StreetNumber": "37",
            "HouseNumber": "5A",
            "HouseExtension": "-",
            "Country": "RO"
          },
          "ShippingAddress": {
            "City": "Iasi",
            "ZipCode": "700049",
            "State": "Iasi",
            "Street": "Sf Lazar",
            "StreetNumber": "37",
            "HouseNumber": "-",
            "HouseExtension": "-",
            "Country": "RO"
          },
          "Customer": {
            "MerchantCustomerID": "null",
            "Email": "customer@test.com",
            "FirstName": "John",
            "LastName": "Doe",
            "Gender": "1",
            "SocialSecurityNumber": "45908-28324",
            "Phone": "0744-783322",
            "Company": "S2P"
          },
          "Card": {
            "HolderName": "John Doe",
            "Number": "4111111111111111",
            "ExpirationMonth": "02",
            "ExpirationYear": "2018",
            "SecurityCode": "312"
          },
          "Capture": true,
          "Retry": true,
          "ReuseCreditCardToken": true
        }
      }

      Response:

      HTTP/1.1 400 Bad Request
      Content-Type: application/json; charset=utf-8
      
      {
        "Payment": {
          "ID": 202959,
          "ClientIP": null,
          "SkinID": null,
          "Created": "20171124082117",
          "MerchantTransactionID": "s2ptest_g4",
          "OriginatorTransactionID": null,
          "Amount": "10002",
          "Currency": "EUR",
          "CapturedAmount": "0",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "Description": "payment product",
          "StatementDescriptor": "bank statement message",
          "MethodID": 6,
          "MethodOptionID": null,
          "SiteID": 1010,
          "NotificationDateTime": null,
          "Customer": {
            "ID": 115,
            "MerchantCustomerID": "null",
            "Email": "customer@test.com",
            "FirstName": "John",
            "LastName": "Doe",
            "Gender": "1",
            "SocialSecurityNumber": "45908-28324",
            "Phone": "0744-783322",
            "Company": "S2P"
          },
          "BillingAddress": {
            "ID": 253,
            "City": "Iasi",
            "ZipCode": "7000-49",
            "State": "Iasi",
            "Street": "Sf Lazar",
            "StreetNumber": "37",
            "HouseNumber": "5A",
            "HouseExtension": "-",
            "Country": "RO"
          },
          "ShippingAddress": {
            "ID": 87,
            "City": "Iasi",
            "ZipCode": "700049",
            "State": "Iasi",
            "Street": "Sf Lazar",
            "StreetNumber": "37",
            "HouseNumber": "-",
            "HouseExtension": "-",
            "Country": "RO"
          },
          "Articles": null,
          "Card": {
            "HolderName": "John Doe",
            "Number": "Ends with 1111",
            "ExpirationMonth": "02",
            "ExpirationYear": "2018"
          },
          "CreditCardToken": null,
          "Status": {
            "ID": 33,
            "Info": "QueuedForCapturing",
            "Reasons": [
              {
                "Code": "5049",
                "Info": "Capture failed but will retry again later"
              }
            ]
          },
          "MethodTransactionID": null,
          "PaymentTokenLifetime": null,
          "Capture": true,
          "Retry": true,
          "RedirectURL": null,
          "3DSecure": false,
          "Fraud": null
        }
      }

      Using the test amount 10002, if you set capture flag to false it will return status Authorized. Then if you sent a capture request it will receive status QueuedForCapturing with return code: 5288: “Capture failed but will retry again later”.

      Request:

      POST https://securetest.smart2pay.com/v1/payments/202960/capture
      Authorization: Basic MTAxMDpnYWJp

      Response:

      HTTP/1.1 200 OK
      Content-Type: application/json; charset=utf-8{
        "Payment": {
          "ID": 202960,
          "ClientIP": null,
          "SkinID": null,
          "Created": "20171124082324",
          "MerchantTransactionID": "s2ptest_g5",
          "OriginatorTransactionID": null,
          "Amount": "10002",
          "Currency": "EUR",
          "CapturedAmount": "0",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "Description": "payment product",
          "StatementDescriptor": "bank statement message",
          "MethodID": 6,
          "MethodOptionID": null,
          "SiteID": 1010,
          "NotificationDateTime": null,
          "Customer": {
            "ID": 115,
            "MerchantCustomerID": "null",
            "Email": "customer@test.com",
            "FirstName": "John",
            "LastName": "Doe",
            "Gender": "1",
            "SocialSecurityNumber": "45908-28324",
            "Phone": "0744-783322",
            "Company": "S2P"
          },
          "BillingAddress": {
            "ID": 253,
            "City": "Iasi",
            "ZipCode": "7000-49",
            "State": "Iasi",
            "Street": "Sf Lazar",
            "StreetNumber": "37",
            "HouseNumber": "5A",
            "HouseExtension": "-",
            "Country": "RO"
          },
          "ShippingAddress": {
            "ID": 87,
            "City": "Iasi",
            "ZipCode": "700049",
            "State": "Iasi",
            "Street": "Sf Lazar",
            "StreetNumber": "37",
            "HouseNumber": "-",
            "HouseExtension": "-",
            "Country": "RO"
          },
          "Articles": null,
          "Card": {
            "HolderName": "John Doe",
            "Number": "411111******1111",
            "ExpirationMonth": "2",
            "ExpirationYear": "2018"
          },
          "CreditCardToken": null,
          "Status": {
            "ID": 33,
            "Info": "QueuedForCapturing",
            "Reasons": [
              {
                "Code": "5049",
                "Info": "Capture failed but will retry again later"
              }
            ]
          },
          "MethodTransactionID": null,
          "PaymentTokenLifetime": null,
          "Capture": false,
          "Retry": true,
          "RedirectURL": null,
          "3DSecure": false,
          "Fraud": null
        }
      }

    • CaptureRequested Status

      Using the test amount 10003, if you set capture flag to true it will return status CaptureRequested.

      Request:

      POST https://securetest.smart2pay.com/v1/payments
      Authorization: Basic MTAxMDpnYWJp
      
      {
        "Payment": {
          "MerchantTransactionID": "s2ptest_g6",
          "Amount": 10003,
          "Currency": "EUR",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "Description": "payment product",
          "StatementDescriptor": "bank statement message",
          "BillingAddress": {
            "City": "Iasi",
            "ZipCode": "7000-49",
            "State": "Iasi",
            "Street": "Sf Lazar",
            "StreetNumber": "37",
            "HouseNumber": "5A",
            "HouseExtension": "-",
            "Country": "RO"
          },
          "ShippingAddress": {
            "City": "Iasi",
            "ZipCode": "700049",
            "State": "Iasi",
            "Street": "Sf Lazar",
            "StreetNumber": "37",
            "HouseNumber": "-",
            "HouseExtension": "-",
            "Country": "RO"
          },
          "Customer": {
            "MerchantCustomerID": "null",
            "Email": "customer@test.com",
            "FirstName": "John",
            "LastName": "Doe",
            "Gender": "1",
            "SocialSecurityNumber": "45908-28324",
            "Phone": "0744-783322",
            "Company": "S2P"
          },
          "Card": {
            "HolderName": "John Doe",
            "Number": "4111111111111111",
            "ExpirationMonth": "02",
            "ExpirationYear": "2018",
            "SecurityCode": "312"
          },
          "Capture": true,
          "Retry": true,
          "ReuseCreditCardToken": true
        }
      }

      Response:

      HTTP/1.1 200 OK
      Content-Type: application/json; charset=utf-8
      
      {
        "Payment": {
          "ID": 202961,
          "ClientIP": null,
          "SkinID": null,
          "Created": "20171124082528",
          "MerchantTransactionID": "s2ptest_g6",
          "OriginatorTransactionID": null,
          "Amount": "10003",
          "Currency": "EUR",
          "CapturedAmount": "0",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "Description": "payment product",
          "StatementDescriptor": "bank statement message",
          "MethodID": 6,
          "MethodOptionID": null,
          "SiteID": 1010,
          "NotificationDateTime": null,
          "Customer": {
            "ID": 115,
            "MerchantCustomerID": "null",
            "Email": "customer@test.com",
            "FirstName": "John",
            "LastName": "Doe",
            "Gender": "1",
            "SocialSecurityNumber": "45908-28324",
            "Phone": "0744-783322",
            "Company": "S2P"
          },
          "BillingAddress": {
            "ID": 253,
            "City": "Iasi",
            "ZipCode": "7000-49",
            "State": "Iasi",
            "Street": "Sf Lazar",
            "StreetNumber": "37",
            "HouseNumber": "5A",
            "HouseExtension": "-",
            "Country": "RO"
          },
          "ShippingAddress": {
            "ID": 87,
            "City": "Iasi",
            "ZipCode": "700049",
            "State": "Iasi",
            "Street": "Sf Lazar",
            "StreetNumber": "37",
            "HouseNumber": "-",
            "HouseExtension": "-",
            "Country": "RO"
          },
          "Articles": null,
          "Card": {
            "HolderName": "John Doe",
            "Number": "Ends with 1111",
            "ExpirationMonth": "02",
            "ExpirationYear": "2018"
          },
          "CreditCardToken": null,
          "Status": {
            "ID": 13,
            "Info": "CaptureRequested",
            "Reasons": []
          },
          "MethodTransactionID": null,
          "PaymentTokenLifetime": null,
          "Capture": true,
          "Retry": true,
          "RedirectURL": null,
          "3DSecure": false,
          "Fraud": null
        }
      }

      Using the test amount 10003, if you set capture flag to false it will return status Authorized. Then if you sent a capture request it will receive status CaptureRequested.

      Request:

      POST https://securetest.smart2pay.com/v1/payments/202962/capture
      Authorization: Basic MTAxMDpnYWJp

      Response:

      HTTP/1.1 200 OK
      Content-Type: application/json; charset=utf-8{
        "Payment": {
          "ID": 202962,
          "ClientIP": null,
          "SkinID": null,
          "Created": "20171124082631",
          "MerchantTransactionID": "s2ptest_g7",
          "OriginatorTransactionID": null,
          "Amount": "10003",
          "Currency": "EUR",
          "CapturedAmount": "0",
          "ReturnURL": "http://demo.smart2pay.com/redirect.php",
          "Description": "payment product",
          "StatementDescriptor": "bank statement message",
          "MethodID": 6,
          "MethodOptionID": null,
          "SiteID": 1010,
          "NotificationDateTime": null,
          "Customer": {
            "ID": 115,
            "MerchantCustomerID": "null",
            "Email": "customer@test.com",
            "FirstName": "John",
            "LastName": "Doe",
            "Gender": "1",
            "SocialSecurityNumber": "45908-28324",
            "Phone": "0744-783322",
            "Company": "S2P"
          },
          "BillingAddress": {
            "ID": 253,
            "City": "Iasi",
            "ZipCode": "7000-49",
            "State": "Iasi",
            "Street": "Sf Lazar",
            "StreetNumber": "37",
            "HouseNumber": "5A",
            "HouseExtension": "-",
            "Country": "RO"
          },
          "ShippingAddress": {
            "ID": 87,
            "City": "Iasi",
            "ZipCode": "700049",
            "State": "Iasi",
            "Street": "Sf Lazar",
            "StreetNumber": "37",
            "HouseNumber": "-",
            "HouseExtension": "-",
            "Country": "RO"
          },
          "Articles": null,
          "Card": {
            "HolderName": "John Doe",
            "Number": "411111******1111",
            "ExpirationMonth": "2",
            "ExpirationYear": "2018"
          },
          "CreditCardToken": null,
          "Status": {
            "ID": 13,
            "Info": "CaptureRequested",
            "Reasons": []
          },
          "MethodTransactionID": null,
          "PaymentTokenLifetime": null,
          "Capture": false,
          "Retry": true,
          "RedirectURL": null,
          "3DSecure": false,
          "Fraud": null
        }
      }