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.
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.
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
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.
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.
Parameters
| Field | Type | Description |
|---|---|---|
client_id required | string | Your own unique transaction id (β€64 chars). Used to track the recharge; reusing one returns the original result instead of charging again (idempotency). |
provider_id required | number | Provider id from GET /providers (e.g. JIO = 6). |
number required | string | 10-digit mobile, or DTH subscriber / VC number. |
amount required | number | Recharge amount in βΉ. |
type | string | MOBILE or DTH. Auto-detected from the provider if omitted. |
customer_mobile | string | Contact 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.
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" }
}'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
| Field | Type | Description |
|---|---|---|
client_id required | string | Your own unique transaction id (β€64 chars) for tracking this verification. |
provider_id required | number | Verification provider id (e.g. 127). Call GET /providers for valid ids. |
number required | string | Bank account number to verify. |
ifsc required | string | 11-character IFSC of the account's branch. |
mobile_number | string | Account 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
| Field | Type | Description |
|---|---|---|
client_id required | string | Your own unique transaction id (β€64 chars) for tracking this verification. |
provider_id required | number | Verification provider id (e.g. 384). Call GET /providers for valid ids. |
number required | string | UPI 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.
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.
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.
Parameters
| Field | Type | Description |
|---|---|---|
origin required | string | Origin airport code, e.g. DEL. |
destination required | string | Destination airport code, e.g. BOM. |
depart_date required | string | Departure date, YYYY-MM-DD. |
return_date | string | Return date for round trips (omit or null for one-way). |
adults | number | Adult count (default 1). |
children / infants | number | Child / infant counts. |
cabin_class | string | Economy, 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
| Field | Type | Description |
|---|---|---|
trace_id required | string | From the search response. |
result_index required | string | The chosen fare's result_index. |
email / mobile required | string | Lead passenger contact details. |
passengers required | array | Each: title, first_name, last_name, pax_type (1 adult / 2 child / 3 infant), gender (1 M / 2 F), date_of_birth, is_lead_pax. |
gstin | string | GSTIN 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
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.
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" } ] }
}| Field | Type | Description |
|---|---|---|
source_id required | string | Origin city id (from city autocomplete). |
destination_id required | string | Destination city id. |
date required | string | Date 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
}
]
}
}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" } ]
}
}| Field | Type | Description |
|---|---|---|
trip_id required | string | Selected trip. |
boarding_id / dropping_id | string | Chosen boarding & dropping point ids. |
email / mobile required | string | Passenger contact details. |
passengers required | array | Each: seat, name, age, gender, fare. |
reference | string | Your 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.
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
}
}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"]
}
}| Field | Type | Description |
|---|---|---|
name required | string | Customer name. |
email required | string | Customer email. |
phone required | string | Customer phone. |
travel_date | string | Preferred travel date. |
travellers | number | Number of travellers. |
message | string | Any 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.
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
}
]
}
}| Field | Type | Description |
|---|---|---|
product_id required | string | Gift-card product id from the catalogue (or send slug). |
amount required | number | Face value / denomination in βΉ. |
quantity | number | How many to buy (default 1). |
recipient | string | Recipient 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_id | Meaning |
|---|---|
1 | Success β the request completed and data is returned. |
2 | Failed β see message (invalid token, missing field, insufficient balance, inactive provider, or operator decline). Any debited amount is refunded. |
3 | Pending β 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
testkey. - Fund your e-wallet and switch to your
livekey. - Register your webhook URL and go live.