Accept Payments for a Startup
Go from zero to accepting live payments in minutes — the fastest path for startups and new businesses on Pine Labs Online.
Go from zero to live payments in minutes. This guide walks you through the fastest integration path for a new business.
What you're building
By the end of this guide, you'll have:
- A Pine Labs Online merchant account
- A working checkout that accepts cards, UPI, wallets, and netbanking
- Test transactions verified on the Dashboard
- A clear path to go live
Before you begin
| Requirement | Details |
|---|---|
| Pine Labs account | Sign up → |
| Business documents | PAN, GST certificate, bank account details |
| A backend server | Node.js, Python, PHP, Java, or any server-side language |
No backend yet? Start with Payment Links — zero code required.
Choose your integration path
We recommend Hosted Checkout for most startups — it's fast to set up and handles payment method display, validation, and security for you.
Step-by-step: Hosted Checkout
Step 1 — Get your API credentials
After signing up, retrieve your credentials from the Dashboard:
- Log in to the Pine Labs Dashboard
- Navigate to Settings → API Keys
- Copy your Client ID and Client Secret
Security: Store credentials in environment variables or a secrets manager. Never commit them to source code.
Step 2 — Generate an access token
All API calls require a Bearer token. Generate one from your backend:
curl --location 'https://pluraluat.v2.pinepg.in/api/auth/v1/token' \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '{
"client_id": "<your_client_id>",
"client_secret": "<your_client_secret>",
"grant_type": "client_credentials"
}'
Response:
{
"access_token": "eyJhbGciOiJIUzI1NiIs...",
"token_type": "Bearer",
"expires_in": 3600
}
Step 3 — Create an order
Create an order for ₹500 (value in paise: 50000):
curl --location 'https://pluraluat.v2.pinepg.in/api/pay/v1/orders' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--header 'Request-ID: <unique_uuid>' \
--header 'Request-Timestamp: 2024-07-09T07:57:08.022Z' \
--data '{
"merchant_order_reference": "STARTUP-ORDER-001",
"order_amount": {
"value": 50000,
"currency": "INR"
},
"pre_auth": false,
"allowed_payment_methods": [
"CARD", "UPI", "NETBANKING", "WALLET"
],
"callback_url": "https://your-domain.com/payment/success",
"failure_callback_url": "https://your-domain.com/payment/failure",
"purchase_details": {
"customer": {
"email_id": "customer@example.com",
"first_name": "Rahul",
"last_name": "Sharma",
"customer_id": "CUST-001",
"mobile_number": "9876543210",
"country_code": "91"
}
}
}'
Response includes:
{
"order_id": "v1-2505051234-aa-xYzAbC",
"checkout_url": "https://checkout.pluralonline.com/...",
"status": "CREATED"
}
Step 4 — Redirect to checkout
Redirect your customer to the checkout_url from the order response. Pine Labs handles:
- Payment method selection (cards, UPI, wallets, netbanking)
- Card number validation and 3D Secure authentication
- UPI intent and collect flows
- Success and failure redirects back to your URLs
<form action="/create-order" method="POST">
<button type="submit">Pay ₹500</button>
</form>
Your server-side handler creates the order and redirects:
// Express.js example
app.post('/create-order', async (req, res) => {
const order = await createPineLabsOrder(); // your API call
res.redirect(order.checkout_url);
});
Step 5 — Handle the callback
After payment, Pine Labs redirects the customer to your callback_url with:
{
"order_id": "v1-2505051234-aa-xYzAbC",
"payment_status": "AUTHORIZED",
"signature": "a1b2c3d4..."
}
Verify the signature on your server (mandatory):
Signature string: order_id=<order_id>&status=AUTHORIZED
Algorithm: SHA256 HMAC with your secret_key
Then capture the order:
curl --request PUT \
'https://pluraluat.v2.pinepg.in/api/pay/v1/orders/{order_id}/capture' \
--header 'Authorization: Bearer <access_token>'
Step 6 — Configure webhooks
Set up webhooks in the Dashboard for real-time payment notifications:
- Go to Dashboard → Settings → Webhooks
- Add your endpoint URL
- Select events:
ORDER_AUTHORIZED,ORDER_CAPTURED,REFUND_PROCESSED
Why webhooks? Don't rely solely on callback redirects. Customers may close their browser before the redirect completes. Webhooks guarantee you receive payment notifications.
Test your integration
Use the UAT environment to test without processing real payments:
| Test scenario | How to test |
|---|---|
| Successful card payment | Use test card details on UAT |
| UPI payment | UPI on UAT processes real transactions — use ₹1 amounts |
| Failed payment | Use test cards configured for decline |
| Webhook delivery | Check webhook logs in Dashboard |
Go live checklist
Before switching from UAT to production:
- Verify your merchant account — complete KYC verification in the Dashboard
- Switch base URL — replace
pluraluat.v2.pinepg.inwithapi.pluralonline.com - Update credentials — use production Client ID and Client Secret
- Configure production webhooks — point to your live server
- Test on production — make a small real payment and refund it
- Set up signature verification — mandatory for all callbacks
- Enable TLS 1.2+ — required for all API communication
What's next?
Once you're live, explore features that help your startup grow:
| Next step | Why |
|---|---|
| Add EMI options | Increase conversions with instalments |
| Set up subscriptions | Automate recurring billing for SaaS |
| Split settlements | Distribute payments across marketplace sellers |
| Payment analytics | Track performance in the Dashboard |
FAQ
How long does account activation take?
UAT access is instant after signup. Production activation typically takes 1–2 business days after document verification.
What payment methods are available by default?
Cards (Visa, Mastercard, RuPay), UPI, Netbanking, and Wallets are enabled by default. EMI, BNPL, and Pay by Points require additional configuration — contact your account manager.
Is there a minimum transaction amount?
The minimum transaction amount is ₹1. There is no maximum limit — high-value transactions may require additional verification based on your merchant category.
Can I test without a live website?
Yes. Use https://localhost or any URL as your callback during testing. You can also use tools like ngrok to expose your local server for webhook testing.
