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.
- Sign Up — Visit the Pine Labs Online Dashboard and register with your business email.
- Verify Your Email — Confirm your email address through the verification link sent to your inbox.
- Find Your Credentials — Once logged in, navigate to Settings → API Keys to generate your test-mode API key and secret.
- 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.

Configure payment methods
Control which payment methods appear on the checkout page using allowed_payment_methods:
{
"allowed_payment_methods": ["CARD", "UPI", "NETBANKING", "WALLET"]
}
Available methods
| Value | Payment method | Description |
|---|---|---|
CARD | Cards | Visa, Mastercard, RuPay credit and debit cards |
UPI | UPI | UPI Collect and Intent flows |
NETBANKING | Net Banking | All major Indian banks |
WALLET | Wallets | Paytm, PhonePe, Amazon Pay, etc. |
POINTS | Reward Points | Pay using card reward points |
CREDIT_EMI | Credit Card EMI | Monthly installments on credit cards |
DEBIT_EMI | Debit Card EMI | Monthly 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:
{
"expire_by": "2025-06-15T23:59:59Z"
}
| Rule | Detail |
|---|---|
| Format | ISO 8601 UTC timestamp |
| Maximum | 180 days from the creation date |
| Default | Uses your merchant-level default expiry if not specified |
| Behavior | When the current time exceeds expire_by, status changes to EXPIRED. No payments accepted. |
Recommended expiry by use case
| Use case | Suggested expiry |
|---|---|
| Instant purchase (e-commerce) | 24–48 hours |
| Invoice or bill payment | 7–30 days |
| Advance booking or deposit | 30–60 days |
| Long-term collection | Up to 180 days |
Configure callback URLs
Set where customers are redirected after payment:
{
"callback_url": "https://yoursite.com/payment/success",
"failure_callback_url": "https://yoursite.com/payment/failure"
}
| Configuration | Behavior |
|---|---|
callback_url only | Redirects for both success and failure |
| Both URLs set | callback_url for success, failure_callback_url for failure |
| Neither URL set | Uses 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:
{
"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:
{
"part_payment": true
}
When enabled:
- The customer can pay any amount up to the total.
- The
amount_duefield 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
PROCESSEDonly 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:
{
"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_holdparameter.
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:
{
"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:
{
"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:
{
"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:
{
"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:
{
"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.
