Customize Checkout for Payment Links

Configure branding, payment methods, expiry, redirects, callbacks, and settlement behavior for Pine Labs Online Payment Link checkout flows.

Customize how your payment links look, behave, and process payments using Pine Labs Online checkout configuration options.

With Pine Labs Online Payment Links, you can configure payment methods, branding, link expiry, redirect URLs, callback handling, pre-authorization, split settlements, partial payments, and customer details — all without building a custom checkout page.

These customization capabilities help businesses create a faster, branded, and conversion-focused payment experience while maintaining flexibility across different customer journeys and payment workflows.

You can also extend the checkout flow using webhooks, refunds, settlements, and reconciliation systems after successful payment collection

Sign Up on the Dashboard & Get API Credentials

Before you begin integrating, create your free Pine Labs Online developer account to get access to UAT credentials, API keys, and the merchant dashboard.

  1. Sign Up — Visit the Pine Labs Online Dashboard and register with your business email.
  1. Verify Your Email — Confirm your email address through the verification link sent to your inbox.
  2. Find Your Credentials — Once logged in, navigate to Settings → API Keys to generate your test-mode API key and secret.
  3. Explore the Dashboard — Use the dashboard to view test payments, refunds, settlements, and webhook configurations before going live.

Once your account is ready, you can immediately start integrating with payment methods using the UAT environment — no production credentials required.

Pine Labs Dashboard

Configure payment methods

Control which payment methods appear on the checkout page using allowed_payment_methods:

JSON
{
  "allowed_payment_methods": ["CARD", "UPI", "NETBANKING", "WALLET"]
}

Available methods

ValuePayment methodDescription
CARDCardsVisa, Mastercard, RuPay credit and debit cards
UPIUPIUPI Collect and Intent flows
NETBANKINGNet BankingAll major Indian banks
WALLETWalletsPaytm, PhonePe, Amazon Pay, etc.
POINTSReward PointsPay using card reward points
CREDIT_EMICredit Card EMIMonthly installments on credit cards
DEBIT_EMIDebit Card EMIMonthly installments on debit cards

If allowed_payment_methods is omitted, all payment methods configured on your Merchant ID are shown to the customer.

📘 Before selecting a method, ensure it is enabled for your account. Contact your account manager to configure additional methods.


Set link expiry

Define when the payment link becomes invalid:

JSON
{
  "expire_by": "2025-06-15T23:59:59Z"
}
RuleDetail
FormatISO 8601 UTC timestamp
Maximum180 days from the creation date
DefaultUses your merchant-level default expiry if not specified
BehaviorWhen the current time exceeds expire_by, status changes to EXPIRED. No payments accepted.

Recommended expiry by use case

Use caseSuggested expiry
Instant purchase (e-commerce)24–48 hours
Invoice or bill payment7–30 days
Advance booking or deposit30–60 days
Long-term collectionUp to 180 days

Configure callback URLs

Set where customers are redirected after payment:

JSON
{
  "callback_url": "https://yoursite.com/payment/success",
  "failure_callback_url": "https://yoursite.com/payment/failure"
}
ConfigurationBehavior
callback_url onlyRedirects for both success and failure
Both URLs setcallback_url for success, failure_callback_url for failure
Neither URL setUses the default URL configured during merchant onboarding

🚧 Important

The redirect is for the customer experience only. Always verify the payment server-side using webhooks or the Get Payment Link API before fulfilling the order.


Enable pre-authorization

Create payment links that authorize a payment without capturing it immediately:

JSON
{
  "pre_auth": "true"
}

When pre_auth is "true":

  • The payment amount is held (authorized) on the customer's card or account.
  • You capture the payment later using the Capture Order API.
  • You can cancel the authorization using the Cancel Order API.
  • The authorization window is typically 5–7 days, depending on the payment network.

Use cases: Hotel bookings, service deposits, rental reservations, order verification before shipping.

Default is "false" — payment is captured immediately when the customer pays.

📘 Pre-authorization must be enabled for your Merchant ID. Contact your account manager to set this up.


Accept part payments

Allow customers to pay a portion of the total amount:

JSON
{
  "part_payment": true
}

When enabled:

  • The customer can pay any amount up to the total.
  • The amount_due field in the API response tracks the remaining balance.
  • The same link remains active for additional payments until fully paid or expired.
  • The link status changes to PROCESSED only when the full amount is paid.

Use cases: Advance payments, deposits, installments, layaway plans.


Split payments across merchants

Distribute the payment across multiple merchant accounts:

JSON
{
  "split_info": {
    "split_type": "ABSOLUTE",
    "split_details": [
      {
        "split_merchant_id": "MERCHANT_002",
        "amount": {
          "value": 3000,
          "currency": "INR"
        }
      }
    ]
  }
}

When split info is provided:

  • The total amount is divided between you and the sub-merchant(s) as specified.
  • Each merchant receives their share during settlement.
  • You can place individual splits on hold using the on_hold parameter.

Use cases: Marketplace payouts, franchise collections, aggregator models.

🚧 Prerequisite

Split settlements must be enabled for your account. See Split Settlements for configuration details.


Enable multi-currency conversion (MCC)

For international or cross-border payment links:

JSON
{
  "is_mcc_transaction": "true"
}

This is mandatory when creating payment links for MCC transactions. Failure to set this flag may cause payment processing failures.

📘 International payments must be enabled for your Merchant ID. See International Payments for details.


Collect customer details

Pre-fill customer information to reduce checkout friction and improve conversion:

JSON
{
  "customer": {
    "email_id": "customer@example.com",
    "first_name": "Rahul",
    "last_name": "Sharma",
    "mobile_number": "9876543210",
    "country_code": "+91",
    "billing_address": {
      "address1": "123 Main Street",
      "city": "Mumbai",
      "state": "Maharashtra",
      "pincode": "400001",
      "country": "India"
    },
    "shipping_address": {
      "address1": "456 Park Avenue",
      "city": "Delhi",
      "state": "Delhi",
      "pincode": "110001",
      "country": "India"
    }
  }
}

Pre-filled details appear on the checkout page, so the customer doesn't have to enter them manually.


Display product and cart details

Show itemized product information on the checkout page:

JSON
{
  "product_details": [
    {
      "product_code": "SKU-001",
      "product_amount": {
        "value": 5000,
        "currency": "INR"
      }
    }
  ],
  "cart_details": {
    "items": [
      {
        "name": "Premium T-Shirt",
        "quantity": 2,
        "amount": 5000
      }
    ]
  }
}

When cart details are provided, the itemized cart is displayed during checkout. This builds customer trust and reduces abandonment.


Apply cart-level discounts

Pass a coupon or discount at the cart level:

JSON
{
  "cart_coupon_discount_amount": {
    "value": 500,
    "currency": "INR"
  }
}

The discount is applied to the total cart amount.


Attach custom metadata

Add custom key-value pairs for your internal tracking and reporting:

JSON
{
  "merchant_metadata": {
    "invoice_id": "INV-2025-001",
    "department": "Sales",
    "campaign": "summer_sale"
  }
}

Metadata is:

  • Stored with the payment link
  • Returned in API responses when you retrieve the link
  • Available in webhook payloads for reconciliation

Use cases: Internal order IDs, campaign tracking, department codes, customer IDs from your CRM.


See also

New chat
Responses are generated using AI and may contain mistakes.
Hi! I'm Pine, your AI developer assistant. Ask me anything about Pine Labs APIs, integrations, or troubleshooting.

Tip: you can create a new chat with + E