ScalaPay

Private Preview




With ScalaPay, merchants can unlock flexible Buy Now, Pay Later (BNPL) options—like paying in 3 or 4 installments—giving shoppers the freedom to split payments while boosting conversion and enhancing the overall shopping experience Learn more about ScalaPay

Payment method properties

Markets (consumer)IT, FR, DE, ES, PT, AT, BE, NL, FI
Processing currenciesEUR
Consumer currenciesEUR
Authentication methodsREDIRECT
Authentication timeout1 Hour
Minimum payment amountVaries based on the product
Maximum payment amountVaries based on the product
Payment instrumentPASSTHROUGH_WALLET
Recurring paymentsNo
Separate capturesNo
RefundFull - Partial - Multiple
Refund validity90 days for Pay in 3
120 days for Pay in 4
DisputesNo
Settlement riskYes

Make a ScalaPay payment

ScalaPay payments follow our standardized REDIRECT payment flow. However, we recommend including all relevant settings for any authentication methods you support. To make a payment, you'll need to provide the following data at minimum when calling our /v1/payment-charges API:

FieldMandatoryDescription
paymentMethodYesSCALAPAY
consumer.nameYesFull name of the consumer (used for display and identity verification)
consumer.emailYesConsumer’s email address (used for receipts, verification, or support)
consumer.phoneYesConsumer’s phone number in international format (e.g., +39...)
consumer.countryYesISO 2-letter country code of the consumer (e.g., NL, DE, ES, FR, IT)
order.orderItemsYesThe list of order items. (name, quantity, amount is mandatory)
order.shippingMethodYesType of delivery

📘

Guidance

To optimize the consumer experience & payment approval rates with the BNPL provider, we highly recommend including the consumer & order object parameters. For more information, see the API Reference.

  1. consumer.client - consumers client details like IP & UserAgent can be used for fraud prevention & enhanced scoring.
  2. consumer.billingAddress- this details can support scoring to help get better approval rates.
  3. consumer.profile - consider providing consumer related CRM info available with the merchant for supporting better scoring & approval with the BNPL provider.
  4. order.orderItems- consider providing all cart details for the order items being purchased.
  5. order.shippingAddress- consider providing when physical goods are expected to be delivered.
  6. order.industryData - consider providing relevant industry details for AIRLINE, TRAVEL, EDUCATION etc.

Request

POST /v1/payment-charges

{
  "paymentMethod": "SCALAPAY",
  "paymentMedium": "ECOMMERCE",
  "initiator": "MERCHANT",
  "paymentDescriptor": "Acme Webshop Says Thank You",
  "merchantPaymentChargeReference": "merch_ref_12345",
  "amount": {
    "currency": "EUR",
    "value": 12000
  },
  "authenticationSettings": [
    {
      "settings": {
        "returnUrl": "https://www.ppro.com/"
      },
      "type": "REDIRECT"
    }
  ],
  "consumer": {
    "name": "Luca Rossi",
    "email": "[email protected]",
    "phone": "+393311234567",
    "birthDate": "1990-01-01",
    "country": "IT",
    "locale": "it-IT",
    "client": {
      "ip": "11.22.22.33",
      "userAgent": "Mozilla/5.0 (X11; CrOS x86_64 ...) Chrome/51.0..."
    },
    "taxIdentification": "RSSLCU90A01H501U",
    "merchantConsumerReference": "consumer_acme_12345",
    "billingAddress": {
      "firstName": "Luca",
      "lastName": "Rossi",
      "phoneNumber": "+393311234567",
      "street": "Via del Corso, 10",
      "postalCode": "00186",
      "city": "Roma",
      "region": "Lazio",
      "country": "IT"
    },
    "profile": {
      "createdDate": "2025-01-01",
      "firstOrderDate": "2025-01-05",
      "lastOrderDate": "2025-05-01",
      "lifetimeOrderCount": 10,
      "lifetimeOrderValue": 450000,
      "lifetimeCanceledOrderCount": 3
    }
  },
  "order": {
    "orderItems": [
      {
        "sku": "TSHIRT01",
        "category": "Apparel",
        "subCategory": "T-Shirt",
        "name": "Classic Cotton T-Shirt",
        "quantity": 1,
        "amount": 5000
      },
      {
        "sku": "JACKET10",
        "category": "Apparel",
        "subCategory": "Jacket",
        "name": "Black Leather Jacket",
        "quantity": 1,
        "amount": 15000
      }
    ],
    "shippingMethod": "TRACKED_DELIVERY",
    "shippingAddress": {
      "firstName": "Luca",
      "lastName": "Rossi",
      "phoneNumber": "+393311234567",
      "street": "Piazza di Spagna, 3",
      "postalCode": "00187",
      "city": "Roma",
      "region": "Lazio",
      "country": "IT"
    },
    "orderReferenceNumber": "order_acme_12345",
    "totalTaxAmount": 4400,
    "industryData": [
      {
        "type": "TRAVEL",
        "details": {
          "travelType": "MULTIPLE",
          "departureDate": "2025-06-01",
          "returnDate": "2025-06-05",
          "departureLocation": "AMS",
          "arrivalLocation": "CDG",
          "destinationCountry": "FR",
          "travelCompany": "Air Fly Inc",
          "travelerCount": 2,
          "buyerAmongTravelers": true,
          "travelClass": "ECONOMY",
          "travelInsured": true,
          "travelDiscountVoucher": "FREEFLY20",
          "luggageSupplement": true,
          "travelCanBeModifiedOrCanceled": true,
          "stayCompany": "My stay Inc",
          "stayDestination": "Paris",
          "stayNightsCount": 5,
          "stayRoomRange": "4_STARS"
        }
      }
    ]
  },
  "autoCapture": true,
  "webhooksUrl": "https://webhook.site/50862fe4-0798-4d92-b3de-dcf1d11ba1ca"
}

Response

You'll receive our standard payment charge response with the available authentication methods:

{
    "id": "charge_F9xzoNWNPnopyZ9zKidHb",
    "paymentMethod": "SCALAPAY",
    "paymentMedium": "ECOMMERCE",
    "initiator": "MERCHANT",
    "scheduleType": "UNSCHEDULED",
    "instrumentId": "instr_WGReQN3r1yhgwYR1OrQeR",
    "currency": "EUR",
    "country": "IT",
    "paymentDescriptor": "Acme Webshop Says Thank You",
    "status": "AUTHENTICATION_PENDING",
    "consumer": {
        "name": "Luca Rossi",
        "email": "[email protected]",
        "phone": "+393311234567",
        "birthDate": "1990-01-01",
        "country": "IT",
        "locale": "it-IT",
        "client": {
            "ip": "11.22.22.33",
            "userAgent": "Mozilla/5.0 (X11; CrOS x86_64 ...) Chrome/51.0..."
        },
        "taxIdentification": "RSSLCU90A01H501U",
        "merchantConsumerReference": "consumer_acme_12345",
        "billingAddress": {
            "firstName": "Luca",
            "lastName": "Rossi",
            "phoneNumber": "+393311234567",
            "street": "Via del Corso, 10",
            "postalCode": "00186",
            "city": "Roma",
            "region": "Lazio",
            "country": "IT"
        },
        "profile": {
            "createdDate": "2025-01-01",
            "firstOrderDate": "2025-01-05",
            "lastOrderDate": "2025-05-01",
            "lifetimeOrderCount": 10,
            "lifetimeOrderValue": 450000,
            "lifetimeCanceledOrderCount": 3
        }
    },
    "order": {
        "orderItems": [
            {
                "sku": "TSHIRT01",
                "category": "Apparel",
                "subCategory": "T-Shirt",
                "name": "Classic Cotton T-Shirt",
                "quantity": 1,
                "amount": 5000
            },
            {
                "sku": "JACKET10",
                "category": "Apparel",
                "subCategory": "Jacket",
                "name": "Black Leather Jacket",
                "quantity": 1,
                "amount": 15000
            }
        ],
        "shippingMethod": "TRACKED_DELIVERY",
        "shippingAddress": {
            "firstName": "Luca",
            "lastName": "Rossi",
            "phoneNumber": "+393311234567",
            "street": "Piazza di Spagna, 3",
            "postalCode": "00187",
            "city": "Roma",
            "region": "Lazio",
            "country": "IT"
        },
        "industryData": [
            {
                "details": {
                    "travelType": "MULTIPLE",
                    "departureDate": "2025-06-01",
                    "returnDate": "2025-06-05",
                    "departureLocation": "AMS",
                    "arrivalLocation": "CDG",
                    "destinationCountry": "FR",
                    "travelCompany": "Air Fly Inc",
                    "travelerCount": 2,
                    "buyerAmongTravelers": true,
                    "travelClass": "ECONOMY",
                    "travelInsured": true,
                    "travelDiscountVoucher": "FREEFLY20",
                    "luggageSupplement": true,
                    "travelCanBeModifiedOrCanceled": true,
                    "stayCompany": "My stay Inc",
                    "stayDestination": "Paris",
                    "stayNightsCount": 5,
                    "stayRoomRange": "4_STARS"
                },
                "type": "TRAVEL"
            }
        ],
        "orderReferenceNumber": "order_acme_12345",
        "totalTaxAmount": 4400
    },
    "authenticationMethods": [
        {
            "details": {
                "requestUrl": "https://pay.scalapay.com/hpp/qwerty124",
                "requestMethod": "GET"
            },
            "type": "REDIRECT"
        }
    ],
    "authorizations": [
        {
            "id": "authz_B77MEwwySeEeemVGrcA2u",
            "amount": 12000,
            "status": "AUTHENTICATION_PENDING",
            "merchantPaymentChargeReference": "merch_ref_12345",
            "createdAt": "2025-09-01T23:05:55.451Z",
            "updatedAt": "2025-09-01T23:05:55.451Z"
        }
    ],
    "captures": [],
    "refunds": [],
    "voids": [],
    "createdAt": "2025-09-01T23:05:55.365Z",
    "updatedAt": "2025-09-01T23:05:55.451Z",
    "_links": {
        "authorizations": {
            "href": "/v1/payment-charges/charge_F9xzoNWNPnopyZ9zKidHb/authorizations"
        },
        "captures": {
            "href": "/v1/payment-charges/charge_F9xzoNWNPnopyZ9zKidHb/captures"
        },
        "refunds": {
            "href": "/v1/payment-charges/charge_F9xzoNWNPnopyZ9zKidHb/refunds"
        },
        "voids": {
            "href": "/v1/payment-charges/charge_F9xzoNWNPnopyZ9zKidHb/voids"
        }
    }
}

Pick the desired authentication method

REDIRECT

  1. Redirect your consumer to the returned $.authenticationMethods[?(@.type == "REDIRECT")].details.requestUrl.
    For example, with the value of https://redirection-target.ppro.com/ using the returned $.authenticationMethods[?(@.type == "REDIRECT")].details.requestMethod HTTP method.
  2. The consumer will be presented with the reference number and instructions to complete the payment.

Handling the payment result

REDIRECT

  1. After the consumer completes the payment, they are redirected to the returnUrl specified in the payment charge creation request.
  2. Upon redirect back to your site, retrieve the latest payment status by performing a GET /v1/payment-charges/{paymentChargeId}. Use the returned status field to determine and display the final payment outcome to the consumer.
  3. Additionally, webhooks are triggered to notify you of the payment result. This ensures you receive the outcome even if the consumer closes their browser or fails to return to your website.

Payment instrument

A PASSTHROUGH_WALLET instrument will be created.

Request

GET /v1/payment-instruments/{instrument-id}

Response

{
    "id": "instr_Asu0ig2PXXZSiNrhY44A5",
    "type": "PASSTHROUGH_WALLET"
}

Sandbox testing

ScenarioCard NumberExpiry DateCVV
✅ Success5200828282828210any date, greater than last installment date123
❗Failure4000000000000341any date, greater than last installment date123

Additional Information

Before you go live

  • Customer journey of various products can be seen here
  • Consider having a look at FloaPay's post-payment customer experience here
  • Check industry-specific requirements: Reach out to your PPRO Account Manager to confirm if there are any additional data specifications needed for your industry. Providing these details in the order.industryData can help maximize your payment approval rates.

Branding guidelines

  • Discover the media kit here