Skip to main content
Buy Now Pay Later (BNPL) lets customers split a purchase into multiple installments, often interest-free for short terms. The customer is approved in real time by the BNPL provider and pays Yuno the full amount upfront — installment collection is handled by the provider.

Available BNPL providers

Providerpayment_method_typeCountryCurrencyNotes
KueskiKUESKIMexico (MX)MXNConsumer credit; redirect flow
AplazoAPLAZOMexico (MX)MXNRetailer installments; redirect flow
Adyen KlarnaKLARNALatAm + GlobalVariesMulti-currency; redirect flow
Each BNPL provider must be configured as a connection in Dashboard > Connections before it appears at checkout. Contact your Yuno account manager to enable a provider for your account.

How BNPL works with Yuno

  1. The customer selects a BNPL option at checkout.
  2. Your backend creates a payment with the BNPL payment_method.type and desired installment count.
  3. Yuno returns a redirect_to URL in the payment response.
  4. The customer is redirected to the BNPL provider’s site to review and approve the installment plan.
  5. After approval, the provider redirects back to your callback_url.
  6. Yuno fires a PAYMENT_STATE_CHANGED webhook when the payment is confirmed.
BNPL flows are always redirect-based. The customer must leave your site to complete approval on the provider’s platform. Design your checkout to handle the redirect gracefully and process the webhook for final order fulfillment.

Create a BNPL payment

curl --request POST \
  --url https://api-sandbox.y.uno/v1/payments \
  --header 'Content-Type: application/json' \
  --header 'private-secret-key: YOUR_SECRET_KEY' \
  --header 'account-code: YOUR_ACCOUNT_CODE' \
  --data '{
    "merchant_order_id": "order-mx-bnpl-001",
    "checkout_session": "SESSION_ID",
    "country": "MX",
    "amount": { "value": 300000, "currency": "MXN" },
    "payment_method": {
      "type": "KUESKI",
      "installments": 3
    },
    "customer_payer": {
      "first_name": "Sofia",
      "last_name": "Ramirez",
      "email": "sofia.ramirez@example.com"
    },
    "callback_url": "https://yourstore.com/checkout/return"
  }'

Response

{
  "payment_id": "pay_bnpl_abc123",
  "status": "PENDING",
  "payment_method": {
    "type": "KUESKI",
    "detail": {
      "redirect_to": "https://kueski.com/pay/session-xyz",
      "installments": 3,
      "installment_amount": { "value": 100000, "currency": "MXN" }
    }
  }
}
Redirect the customer to payment_method.detail.redirect_to immediately after receiving this response.

Handling the redirect return

After the customer approves or rejects the installment plan, the BNPL provider redirects back to your callback_url with a query parameter indicating the result. Do not rely on this redirect alone for order fulfillment — use the webhook instead.
// On your callback page
const params = new URLSearchParams(window.location.search);
const paymentId = params.get('payment_id');

// Show a holding screen while awaiting webhook confirmation
showMessage('Processing your payment — please wait a moment.');

// Your backend listens for PAYMENT_STATE_CHANGED webhook
// and updates the order status

Webhook confirmation

{
  "type": "PAYMENT_STATE_CHANGED",
  "data": {
    "payment_id": "pay_bnpl_abc123",
    "status": "SUCCEEDED",
    "payment_method_type": "KUESKI"
  }
}
Only fulfill the order after receiving status: "SUCCEEDED" from the webhook.

Installment plans

The installments field specifies how many installments the payment is split into. Available installment counts depend on the provider’s configuration and the payment amount.
You control which installment options appear at checkout. Configure plans in Dashboard > Payment Features > Installments.Merchant installments guide →
Display installment breakdowns clearly before the customer is redirected. Showing the per-installment amount (e.g., “3 x MXN 1,000”) alongside the total increases BNPL conversion rates.

Minimum and maximum amounts

Each BNPL provider enforces minimum and maximum transaction amounts. If the payment amount falls outside the allowed range, the provider rejects the request. Verify limits with your provider configuration or the Yuno Dashboard before surfacing BNPL as an option.