For Business🌐 India
Developer Docs

Build with the Pay2All API

Clean REST APIs for recharge, bill payment, AEPS, DMT and payouts β€” plus flight & bus booking, holiday packages and gift cards β€” with Bearer authentication, a sandbox, webhooks and predictable JSON responses.

Introduction

The Pay2All API lets you add recharge, bill payment, banking, payouts and travel commerce β€” flights, buses, holiday packages and gift cards β€” to your own app or portal. All requests are made over HTTPS to the base URL below and return JSON.

BASEhttps://partner.pay2all.in/api/v1

Every transaction is funded from your single Pay2All e-wallet. Fund the wallet, call an endpoint, and the amount plus your commission is settled automatically.

Endpoints and payloads shown here are illustrative. Once you register, your dashboard shows your exact base URL, live keys and the full biller/operator catalogue.

Authentication

Authenticate every request with your secret API key as a Bearer token in the Authorization header (or an x-api-token header). Keep your key secret β€” never expose it in client-side code.

curl https://partner.pay2all.in/api/v1/balance \
  -H "Authorization: Bearer YOUR_API_KEY"

Generate and rotate your token from your dashboard (Developer β†’ API token). A missing, invalid or revoked token returns status_id 2 with a message. If you set an IP whitelist, calls are only accepted from those server IPs.

Wallet balance

GET/balanceCurrent wallet balance

Response

{
  "status_id": 1,
  "message": "Wallet balance fetched successfully.",
  "data": { "organization": "Acme", "balance": 4761.00, "currency": "INR" }
}

Every response uses the same envelope: status_id (1 = success, 2 = failed, 3 = pending), a human message, and a data object on success.

Providers

Before recharging, fetch the live catalogue of services and their providers. Use the returned provider_id (a sequential number, e.g. JIO = 6) in the recharge call, and service_id to group services. Only active services / providers are listed.

GET/providersServices & provider ids

Response

curl https://partner.pay2all.in/api/v1/providers \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "status_id": 1,
  "message": "Providers fetched successfully.",
  "data": {
    "services": [
      {
        "service_id": 1,
        "service": "Mobile Recharge",
        "code": "MOBILE",
        "providers": [
          { "provider_id": 6, "name": "JIO", "code": "JIO" },
          { "provider_id": 4, "name": "AIRTEL", "code": "AIRTEL" }
        ]
      }
    ]
  }
}

Recharge

Process prepaid, postpaid, DTH and data-card recharges. The amount is debited from your wallet; if the operator fails, it is refunded automatically.

POST/recharge

Parameters

FieldTypeDescription
client_id requiredstringYour own unique transaction id (≀64 chars). Used to track the recharge; reusing one returns the original result instead of charging again (idempotency).
provider_id requirednumberProvider id from GET /providers (e.g. JIO = 6).
number requiredstring10-digit mobile, or DTH subscriber / VC number.
amount requirednumberRecharge amount in β‚Ή.
typestringMOBILE or DTH. Auto-detected from the provider if omitted.
customer_mobilestringContact number for DTH / receipts.

Request

curl -X POST https://partner.pay2all.in/api/v1/recharge \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": "TXN-1001",
    "provider_id": 6,
    "number": "9876543210",
    "amount": 239
  }'

Response

{
  "status_id": 1,
  "message": "Recharge successful.",
  "data": {
    "txn_id": "cmsc…",
    "client_id": "RC6938…",
    "utr": "JIO-99823",
    "report_id": "88231",
    "number": "9876543210",
    "amount": 239,
    "wallet_balance": 4522.00
  }
}

Send a unique client_id with every request β€” it is your transaction id for tracking and is echoed back in the response and webhook. Reusing the same client_id safely returns the original result instead of recharging twice. Pending recharges settle via webhook.

Bill Payment

Fetch a bill from any of 1000+ billers, then pay it. First fetch the live amount, then submit payment.

POST/bbps/fetch-billFetch live bill amount
curl -X POST https://partner.pay2all.in/api/v1/bbps/fetch-bill \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "billerId": "MSEB00000MUM01",
    "params": { "consumerNumber": "1234567890" }
  }'
POST/bbps/payPay the fetched bill
curl -X POST https://partner.pay2all.in/api/v1/bbps/pay \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "billerId": "MSEB00000MUM01",
    "amount": 540,
    "params": { "consumerNumber": "1234567890" },
    "reference": "BILL-2201"
  }'

Biller categories include electricity, water, gas, broadband, DTH, FASTag, loan EMI, insurance and more. Get the full biller list and each biller's required params from GET /bbps/billers.

Verification

Verify a bank account or UPI ID and fetch the registered holder name before you send money β€” a penny-less name check that helps avoid wrong-beneficiary transfers. Both endpoints are funded per successful verification from your wallet.

Bank account verification

POST/verify/bank_accountFetch account holder name
FieldTypeDescription
client_id requiredstringYour own unique transaction id (≀64 chars) for tracking this verification.
provider_id requirednumberVerification provider id (e.g. 127). Call GET /providers for valid ids.
number requiredstringBank account number to verify.
ifsc requiredstring11-character IFSC of the account's branch.
mobile_numberstringAccount holder's mobile (optional, improves match rate).

Request

curl -X POST https://partner.pay2all.in/api/v1/verify/bank_account \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": "AT0018aa1",
    "provider_id": 127,
    "mobile_number": "8860181421",
    "number": "8802034056",
    "ifsc": "AIRP0000001"
  }'

Response

{
  "status_id": 1,
  "message": "Account verified.",
  "data": {
    "client_id": "AT0018aa1",
    "name": "RAHUL KUMAR",
    "bank_name": "AIRTEL PAYMENTS BANK",
    "number": "8802034056",
    "ifsc": "AIRP0000001"
  }
}

UPI verification

POST/verify/upiFetch UPI holder name
FieldTypeDescription
client_id requiredstringYour own unique transaction id (≀64 chars) for tracking this verification.
provider_id requirednumberVerification provider id (e.g. 384). Call GET /providers for valid ids.
number requiredstringUPI ID to verify, e.g. name@bank.

Request

curl -X POST https://partner.pay2all.in/api/v1/verify/upi \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": "A2812586",
    "provider_id": 384,
    "number": "pay2all@pingpay"
  }'

Response

{
  "status_id": 1,
  "message": "UPI verified.",
  "data": {
    "client_id": "A2812586",
    "name": "PAY2ALL TECHNOLOGIES",
    "number": "pay2all@pingpay"
  }
}

On success data.name holds the registered holder name. A status_id 2 means the account/UPI could not be verified β€” check the details and try again.

AEPS & DMT

Offer Aadhaar-based banking (AEPS) and domestic money transfer (DMT) to your retailers.

POST/aeps/withdrawalAadhaar cash withdrawal
POST/dmt/remitterOnboard a remitter (OTP KYC)
POST/dmt/transferSend money via IMPS / NEFT

AEPS requires a certified biometric device; DMT requires OTP-based remitter KYC and beneficiary account validation. See your dashboard for onboarding steps.

Payout

Send instant single or bulk payouts to any bank account or UPI ID via IMPS, NEFT, RTGS or UPI.

POST/payout
curl -X POST https://partner.pay2all.in/api/v1/payout \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 5000,
    "mode": "IMPS",
    "account": "1234567890",
    "ifsc": "HDFC0000123",
    "name": "Rahul Kumar",
    "reference": "PO-5501"
  }'

Flight Booking

Book domestic and international flights in three steps: search live fares, book the selected fare, then issue the ticket. The trace_id returned by search threads the whole flow together, and each fare carries a result_index you pass to book.

POST/flights/searchLive fare search

Parameters

FieldTypeDescription
origin requiredstringOrigin airport code, e.g. DEL.
destination requiredstringDestination airport code, e.g. BOM.
depart_date requiredstringDeparture date, YYYY-MM-DD.
return_datestringReturn date for round trips (omit or null for one-way).
adultsnumberAdult count (default 1).
children / infantsnumberChild / infant counts.
cabin_classstringEconomy, PremiumEconomy, Business or First.

Request

curl -X POST https://partner.pay2all.in/api/v1/flights/search \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "origin": "DEL",
    "destination": "BOM",
    "depart_date": "2026-09-14",
    "return_date": null,
    "adults": 1,
    "children": 0,
    "infants": 0,
    "cabin_class": "Economy"
  }'

Response

{
  "status_id": 1,
  "message": "Flights fetched successfully.",
  "data": {
    "trace_id": "a1b2c3d4",
    "results": [
      {
        "result_index": "OB1",
        "airline": "IndiGo",
        "flight_number": "6E-2043",
        "origin": "DEL",
        "destination": "BOM",
        "departure": "2026-09-14T06:10:00",
        "arrival": "2026-09-14T08:25:00",
        "stops": 0,
        "refundable": true,
        "fare": { "base": 3450, "tax": 820, "total": 4270, "currency": "INR" }
      }
    ]
  }
}

Book the selected fare

POST/flights/bookHold the fare for passengers
FieldTypeDescription
trace_id requiredstringFrom the search response.
result_index requiredstringThe chosen fare's result_index.
email / mobile requiredstringLead passenger contact details.
passengers requiredarrayEach: title, first_name, last_name, pax_type (1 adult / 2 child / 3 infant), gender (1 M / 2 F), date_of_birth, is_lead_pax.
gstinstringGSTIN for the invoice (optional).

Request

curl -X POST https://partner.pay2all.in/api/v1/flights/book \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "trace_id": "a1b2c3d4",
    "result_index": "OB1",
    "email": "agent@shop.in",
    "mobile": "9876543210",
    "passengers": [
      {
        "title": "Mr",
        "first_name": "Sagar",
        "last_name": "Kumar",
        "pax_type": 1,
        "gender": 1,
        "is_lead_pax": true
      }
    ]
  }'

Response

{
  "status_id": 1,
  "message": "Fare booked. Proceed to ticketing.",
  "data": { "booking_id": "BK123456", "pnr": null, "status": "BOOKED", "amount": 4270, "currency": "INR" }
}

Issue the ticket

POST/flights/ticketConfirm & get the PNR
curl -X POST https://partner.pay2all.in/api/v1/flights/ticket \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "trace_id": "a1b2c3d4", "booking_id": "BK123456" }'
{
  "status_id": 1,
  "message": "Ticket issued successfully.",
  "data": { "booking_id": "BK123456", "pnr": "X4K2QP", "status": "TICKETED", "amount": 4270, "currency": "INR" }
}

Low-cost carriers can book and ticket in one step. The fare is debited from your wallet on ticketing; a failed issue is auto-refunded.

Bus Booking

Sell bus tickets across thousands of operators: look up cities, search trips, fetch the seat layout, then book the chosen seats.

GET/buses/cities?q=delCity autocomplete
curl "https://partner.pay2all.in/api/v1/buses/cities?q=del" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "status_id": 1,
  "message": "Cities fetched successfully.",
  "data": { "cities": [ { "id": "122", "name": "Delhi" }, { "id": "124", "name": "Dehradun" } ] }
}
POST/buses/searchAvailable trips
FieldTypeDescription
source_id requiredstringOrigin city id (from city autocomplete).
destination_id requiredstringDestination city id.
date requiredstringDate of journey, YYYY-MM-DD.
curl -X POST https://partner.pay2all.in/api/v1/buses/search \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "source_id": "122",
    "destination_id": "56",
    "date": "2026-09-20"
  }'
{
  "status_id": 1,
  "message": "Trips fetched successfully.",
  "data": {
    "trace_id": "bus-77aa",
    "trips": [
      {
        "trip_id": "TR99881",
        "operator": "Zingbus",
        "bus_type": "AC Sleeper (2+1)",
        "departure": "21:30",
        "arrival": "06:15",
        "duration": "8h45m",
        "fare_min": 899,
        "fare_max": 1299,
        "available_seats": 23
      }
    ]
  }
}
POST/buses/seat-layoutSeat map & boarding points
curl -X POST https://partner.pay2all.in/api/v1/buses/seat-layout \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "trip_id": "TR99881" }'
{
  "status_id": 1,
  "message": "Seat layout fetched successfully.",
  "data": {
    "trip_id": "TR99881",
    "seats": [
      { "seat": "L1", "available": true, "ladies": false, "fare": 899 },
      { "seat": "L2", "available": false, "fare": 899 }
    ],
    "boarding": [ { "id": "BP1", "name": "Kashmere Gate", "time": "21:30" } ],
    "dropping": [ { "id": "DP1", "name": "Sohna Road", "time": "06:15" } ]
  }
}
POST/buses/bookConfirm seats & issue ticket
FieldTypeDescription
trip_id requiredstringSelected trip.
boarding_id / dropping_idstringChosen boarding & dropping point ids.
email / mobile requiredstringPassenger contact details.
passengers requiredarrayEach: seat, name, age, gender, fare.
referencestringYour own booking reference (optional).
curl -X POST https://partner.pay2all.in/api/v1/buses/book \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "trip_id": "TR99881",
    "boarding_id": "BP1",
    "dropping_id": "DP1",
    "email": "agent@shop.in",
    "mobile": "9876543210",
    "reference": "BUS-ORD-771",
    "passengers": [
      { "seat": "L1", "name": "Sagar Kumar", "age": 29, "gender": "M", "fare": 899 }
    ]
  }'
{
  "status_id": 1,
  "message": "Bus ticket confirmed.",
  "data": { "pnr": "TIN9928341", "trip_id": "TR99881", "seats": ["L1"], "amount": 899, "currency": "INR", "status": "CONFIRMED" }
}

Holiday Packages

Surface curated holiday packages on your storefront and capture customer enquiries β€” the lead lands in your dashboard for follow-up.

GET/holidays/packagesList packages (filterable)

Filter with query params: destination, theme (honeymoon / family / adventure…), min_price, max_price, page, limit.

curl "https://partner.pay2all.in/api/v1/holidays/packages?destination=Bali&theme=honeymoon" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "status_id": 1,
  "message": "Packages fetched successfully.",
  "data": {
    "rows": [
      {
        "id": 14,
        "slug": "magical-bali-5n6d",
        "title": "Magical Bali 5N/6D",
        "destination": "Bali",
        "nights": 5,
        "days": 6,
        "price_from": 41999,
        "currency": "INR",
        "theme": "Honeymoon",
        "image": "https://cdn.pay2all.in/holidays/bali.jpg"
      }
    ],
    "total": 37
  }
}
GET/holidays/packages/{slug}Full package detail
curl "https://partner.pay2all.in/api/v1/holidays/packages/magical-bali-5n6d" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "status_id": 1,
  "message": "Package fetched successfully.",
  "data": {
    "id": 14,
    "slug": "magical-bali-5n6d",
    "title": "Magical Bali 5N/6D",
    "destination": "Bali",
    "nights": 5,
    "days": 6,
    "price_from": 41999,
    "currency": "INR",
    "itinerary": [ { "day": 1, "title": "Arrival & Kuta Beach", "details": "Airport pickup, hotel check-in…" } ],
    "inclusions": ["4-star hotel", "Daily breakfast", "Airport transfers"],
    "exclusions": ["Airfare", "Visa"],
    "gallery": ["https://cdn.pay2all.in/holidays/bali-1.jpg"]
  }
}
POST/holidays/packages/{id}/enquirySubmit a customer enquiry
FieldTypeDescription
name requiredstringCustomer name.
email requiredstringCustomer email.
phone requiredstringCustomer phone.
travel_datestringPreferred travel date.
travellersnumberNumber of travellers.
messagestringAny special requirements.
curl -X POST https://partner.pay2all.in/api/v1/holidays/packages/14/enquiry \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Sagar Kumar",
    "email": "sagar@example.com",
    "phone": "9876543210",
    "travel_date": "2026-11-02",
    "travellers": 2,
    "message": "Honeymoon package, sea-view room preferred."
  }'
{
  "status_id": 1,
  "message": "Enquiry received. Our travel desk will contact the customer shortly.",
  "data": { "enquiry_id": 501, "package_id": 14 }
}

Gift Cards

Sell e-gift vouchers from popular brands. Browse the live catalogue, then purchase β€” the face value less your discount is debited from your wallet and the voucher code(s) are returned instantly.

GET/gift-cardsLive gift-card catalogue
curl "https://partner.pay2all.in/api/v1/gift-cards" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "status_id": 1,
  "message": "Gift cards fetched successfully.",
  "data": {
    "rows": [
      {
        "slug": "amazon-pay-e-gift-card",
        "product_id": "Q3ZDILtvAyLbKZ",
        "name": "Amazon Pay e-Gift Card",
        "brand": "Amazon",
        "image": "https://cdn.pay2all.in/gift/amazon.png",
        "denominations": [100, 250, 500, 1000],
        "min": 10,
        "max": 10000,
        "discount_pct": 2
      }
    ]
  }
}
POST/gift-cards/purchaseBuy a voucher
FieldTypeDescription
product_id requiredstringGift-card product id from the catalogue (or send slug).
amount requirednumberFace value / denomination in β‚Ή.
quantitynumberHow many to buy (default 1).
recipientstringRecipient email / phone for delivery (optional).
curl -X POST https://partner.pay2all.in/api/v1/gift-cards/purchase \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "product_id": "Q3ZDILtvAyLbKZ",
    "amount": 500,
    "quantity": 1,
    "recipient": "customer@example.com"
  }'
{
  "status_id": 1,
  "message": "Gift voucher purchased successfully.",
  "data": {
    "order_id": "GV-000318",
    "name": "Amazon Pay e-Gift Card",
    "amount": 500,
    "quantity": 1,
    "price": 490,
    "status": "SUCCESS",
    "cards": [ { "code": "AMZN-XXXX-XXXX-1234", "pin": "4821", "expiry": "2027-08-17" } ],
    "wallet_balance": 13461.50
  }
}

The data.cards array holds the issued code(s) and PIN. A status_id 2 with Insufficient wallet balance means you need to top up before retrying.

Webhooks

Register a webhook URL in your dashboard (Developer β†’ API settings). When a pending transaction settles, we POST this JSON to your URL. Match it to your request by client_id.

{
  "txn_id": "cmsc…",
  "client_id": "TXN-1001",
  "status_id": 1,
  "utr": "JIO-99823",
  "report_id": "88231",
  "amount": 239,
  "wallet_balance": 4522.00
}

Respond with 200 OK within 5 seconds; we retry failed deliveries. The status_id tells you the outcome: 1 = success, 2 = failed (amount refunded), 3 = still pending.

Errors

Every response carries a status_id and a human-readable message. Check status_id first, then read message for the reason.

status_idMeaning
1Success β€” the request completed and data is returned.
2Failed β€” see message (invalid token, missing field, insufficient balance, inactive provider, or operator decline). Any debited amount is refunded.
3Pending β€” accepted and processing; the final result arrives via webhook.

Common status_id 2 messages: client_id is required, provider_id is required, Insufficient wallet balance, and Invalid or inactive API token. Send a unique client_id per request so a safe retry never double-charges.

Going live

Ready to launch? Here's the path from sandbox to production:

  • Register and complete your business KYC to unlock live keys.
  • Test every flow in the sandbox with your test key.
  • Fund your e-wallet and switch to your live key.
  • Register your webhook URL and go live.
Need help integrating? Our developer team can guide your team through onboarding and review your integration before you go live.
Developers β€” Pay2All API Documentation, Keys & Sandbox | Pay2All