aluu Pay API Documentation
Introduction
aluu Pay provides simple APIs to integrate UPI payments into your application. This documentation covers the Create Order and Check Order Status APIs.
Base URL
All API endpoints start with: https://pay.aluu.in/api/
Authentication
All requests require your user_token for authentication. This token is provided when you register as a merchant.
Create Order API
Initiate a new payment transaction and get a payment URL for your customer.
/create-order
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| customer_mobile | String | Yes | Customer's 10-digit mobile number |
| user_token | String | Yes | Your merchant authentication token |
| amount | Numeric | Yes | Transaction amount (minimum ₹1) |
| order_id | String | Yes | Your unique order identifier (max 50 chars) |
| redirect_url | URL | Yes | URL to redirect after payment completion |
| remark1 | String | No | Additional remark (max 100 chars) |
| remark2 | String | No | Additional remark (max 100 chars) |
Important Notes
- Order Timeout: 30 minutes. Orders automatically fail after timeout
- Content-Type: application/x-www-form-urlencoded
- Order ID: Must be unique per transaction
Request Example
POST /api/create-order Content-Type: application/x-www-form-urlencoded customer_mobile=8145344963&user_token=4f4f2d5860edb2ee76ba899d3b63bd02&amount=1&order_id=8787772321800&redirect_url=https://yourwebsite.com/callback&remark1=testremark&remark2=testremark2
Success Response (200 OK)
{
"status": true,
"message": "Order Created Successfully",
"result": {
"orderId": "1234561705047510",
"payment_url": "https://yourwebsite.com/payment/pay.php?data=MTIzNDU2MTcwNTA0NzUxMkyNTIy"
}
}
Error Responses
{
"status": false,
"message": "Order_id Already Exist"
}
{
"status": false,
"message": "Invalid user_token"
}
{
"status": false,
"message": "Amount must be at least 1"
}
Create Crypto Order API New
Accept USDT on TRC20, BEP20, ERC20, or Polygon. This is non-custodial: payment goes straight to your own connected wallet address (set from your dashboard's Connect Crypto page) — we only watch the public blockchain to confirm it arrived, we never hold the funds or your private keys.
Important: the amount your customer actually pays is not exactly what you request
Your wallet address is the same one across every order, so we can't tell orders apart by address alone the way a fresh UPI QR code can. To fix that, we add a small, unique fraction of a cent (between $0.0001 and $0.0099) to the amount you request — that's what makes the payment identifiable as this order, not someone else's.
This is your decision to hand off, not ours to hide: the exact amount to
charge is always in the response as each option's amount — that's what
your customer needs to send, and what you should reconcile actual payments against, not
your original amount (returned back to you as requested_amount for
comparison). It's a genuinely tiny amount in dollar terms, but if your customers think in
another currency, do the conversion before deciding it's negligible — don't assume it
away.
The checkout page explains this to the customer directly, so you don't need to separately disclose it to them — but your own integration (order records, reconciliation, support tooling) needs to expect the paid amount to differ from what you requested by design.
/create-crypto-order
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| customer_mobile | String | Yes | Customer's 10-digit mobile number |
| user_token | String | Yes | Your merchant authentication token |
| amount | Numeric | Yes | Transaction amount in USD (charged as an equivalent amount of USDT) |
| order_id | String | Yes | Your unique order identifier |
| redirect_url | URL | Yes | URL to redirect after payment completion |
| remark1 / remark2 | String | No | Additional remarks |
| network | String | No | One of TRC20, BEP20, ERC20, POLYGON. Omit it and the checkout page shows every network you've connected, letting the customer pick. |
Important Notes
- Connect a wallet first: the order fails if you haven't connected at least one network's address (or the specific one requested)
- Amount matching: the amount returned for each network is nudged slightly (e.g. 50.0043, not exactly 50) — that's how one payment gets matched to this specific order among everyone else paying you at the same time. It is not an extra charge; tell your customer to send the exact amount shown
- Content-Type: application/x-www-form-urlencoded
Request Example — locked to one network
POST /api/create-crypto-order Content-Type: application/x-www-form-urlencoded customer_mobile=8145344963&user_token=4f4f2d5860edb2ee76ba899d3b63bd02&amount=50&order_id=8787772321800&redirect_url=https://yourwebsite.com/callback&network=TRC20
Checkout only ever shows TRC20 for this order, regardless of what else you've connected.
Success Response (200 OK)
{
"status": true,
"message": "Order Created Successfully",
"result": {
"orderId": "8787772321800",
"requested_amount": "50.00",
"options": [
{
"network": "TRC20",
"address": "T...",
"amount": "50.0043"
}
],
"payment_url": "https://yourwebsite.com/payment3/crypto_pay?tx=PGX..."
}
}
Request Example — let the customer pick
POST /api/create-crypto-order Content-Type: application/x-www-form-urlencoded customer_mobile=8145344963&user_token=4f4f2d5860edb2ee76ba899d3b63bd02&amount=50&order_id=8787772321800&redirect_url=https://yourwebsite.com/callback
No network parameter at all — not blank, just omitted entirely. Checkout shows a tab for every network you've connected on the Connect Crypto page, and the customer picks.
Success Response (200 OK)
{
"status": true,
"message": "Order Created Successfully",
"result": {
"orderId": "8787772321800",
"requested_amount": "50.00",
"options": [
{ "network": "TRC20", "address": "T...", "amount": "50.0043" },
{ "network": "BEP20", "address": "0x...", "amount": "50.0068" },
{ "network": "ERC20", "address": "0x...", "amount": "50.0021" }
],
"payment_url": "https://yourwebsite.com/payment3/crypto_pay?tx=PGX..."
}
}
options has one entry per connected network. Each amount is nudged slightly and differently per network (e.g. 50.0043 vs 50.0068, not exactly 50) — that's how a payment gets matched to this specific order, not an extra charge. Tell your customer to send the exact amount shown for whichever network they choose.
Error Responses
{
"status": false,
"message": "Merchant has not connected any crypto wallet"
}
{
"status": false,
"message": "Invalid or unsupported network. Use TRC20, BEP20, ERC20, or POLYGON."
}
Check Order Status API
Check the status of an existing order/transaction.
/check-order-status
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| user_token | String | Yes | Your merchant authentication token |
| order_id | String | Yes | The order ID you want to check |
Request Example
POST /api/check-order-status Content-Type: application/x-www-form-urlencoded user_token=2048f66bef68633fa3262d7a398ab577&order_id=8052313697
Success Response (200 OK)
{
"status": "COMPLETED",
"message": "Transaction Successfully",
"result": {
"txnStatus": "COMPLETED",
"resultInfo": "Transaction Success",
"orderId": "784525sdD",
"status": "SUCCESS",
"amount": "1",
"date": "2024-01-12 13:22:08",
"utr": "454525454245"
}
}
For a crypto order (created via Create Crypto Order above), a successful result also includes network (which network the payment came in on) and crypto_txid (the on-chain transaction hash) — utr holds the same transaction hash for these, kept for consistency with regular orders.
Possible Status Values
- COMPLETED: Payment successful
- PENDING: Payment initiated but not completed
- FAILED: Payment failed or expired
- ERROR: Technical error occurred
Error Responses
{
"status": "ERROR",
"message": "Order not found"
}
{
"status": "ERROR",
"message": "Invalid user_token"
}
Best Practices
Order ID Generation
Generate unique order IDs on your server. Recommended format: [merchant_prefix][timestamp][random_digits]
Error Handling
Always check the status field in responses and handle all possible error cases.
Webhook Integration
For real-time notifications, implement our webhook API to receive payment status updates instantly.
Testing
Use our sandbox environment for testing with test amounts (₹1-₹10 recommended).
Support
For technical support or questions about API integration:
- Email: support@aluu.in
- Phone: +63 9758934233 (10AM-6PM IST)
- WhatsApp: +63 9758934233