Buy now, pay later

How Buy Now Pay Later methods work on PayMongo — current providers, how they attach to a Payment Intent, and customer eligibility considerations.

Overview

Buy Now, Pay Later (BNPL) lets customers complete purchases immediately and pay over time in scheduled installments. PayMongo integrates with BillEase as the BNPL provider. As the merchant, you receive the full payment amount (minus processing fees) when the transaction completes — BillEase handles the installment collection from the customer.


Provider

ProviderPayment method type
BillEasebillease

How it attaches to a Payment Intent

BNPL follows the standard Payment Intent redirect flow:

  1. Create a Payment Intent with "billease" in payment_method_allowed
  2. Create a Payment Method with type: "billease"
  3. Attach the Payment Method — the response includes next_action.redirect.url
  4. Redirect the customer to BillEase to complete the eligibility check and installment selection
  5. Customer returns to your return_url
  6. Confirm via webhookpayment.paid or payment.failed

Customer eligibility

BillEase assesses customer eligibility during the redirect step. Not all customers will qualify — eligibility is determined by BillEase based on the customer's account history and credit standing. If the customer is not eligible, the payment fails and the Payment Intent returns to awaiting_payment_method.

Handle this case in your UI: show a message that BNPL wasn't available for this customer and offer an alternative payment method.


Accept a BNPL payment

Create a Payment Intent

const intent = await fetch('https://api.paymongo.com/v1/payment_intents', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Basic ' + btoa('sk_test_YOUR_SECRET_KEY:')
  },
  body: JSON.stringify({
    data: {
      attributes: {
        amount: 50000,
        currency: 'PHP',
        payment_method_allowed: ['billease', 'card', 'gcash'],
        description: 'Order #5678'
      }
    }
  })
}).then(r => r.json());

Create and attach a Payment Method

// Create
const pm = await fetch('https://api.paymongo.com/v1/payment_methods', {
  method: 'POST',
  headers: { 'Authorization': 'Basic ' + btoa('pk_test_YOUR_PUBLIC_KEY:'), 'Content-Type': 'application/json' },
  body: JSON.stringify({
    data: { attributes: { type: 'billease' } }
  })
}).then(r => r.json());

// Attach
const intent = await fetch(
  `https://api.paymongo.com/v1/payment_intents/${paymentIntentId}/attach`,
  {
    method: 'POST',
    headers: { 'Authorization': 'Basic ' + btoa('pk_test_YOUR_PUBLIC_KEY:'), 'Content-Type': 'application/json' },
    body: JSON.stringify({
      data: {
        attributes: {
          payment_method: pm.data.id,
          client_key: clientKey,
          return_url: 'https://yoursite.com/payment/complete'
        }
      }
    })
  }
).then(r => r.json());

// Redirect to BillEase
window.location.href = intent.data.attributes.next_action.redirect.url;

Transaction amounts

BNPL follows the same minimum and maximum amount limits as the Payment Intent. There are no separate limits set by PayMongo for BillEase. However, a customer's individual eligibility — determined by BillEase based on their account and credit standing — may affect whether a specific transaction is accepted.