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.

POST /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.

POST /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.

POST /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: