BBPS API Integration - Bharat Bill Payment System
| |

BBPS API Integration Guide: Bharat Bill Payment System for Enterprises

What is BBPS?

BBPS (Bharat Bill Payment System) is an RBI-mandated, NPCI-operated interoperable bill payment platform that enables customers to pay bills across multiple categories — electricity, gas, water, telecom, insurance, loan EMIs, and more — through a unified interface.

For businesses, the BBPS API provides a single integration point to offer bill payment services for 200+ biller categories. NxtBanking Bill Connect is a certified BBPS agent platform that makes integration seamless.

How BBPS Works: Architecture Overview

The BBPS ecosystem involves four key participants:

  1. Customer: Initiates bill payment through your app or website.
  2. Agent Institution (AI): Your platform, integrated with BBPS via NxtBanking API.
  3. NPCI (Central Unit): Routes the payment request to the correct biller.
  4. Biller/Operating Unit: Receives payment and confirms bill settlement.

Every transaction gets a unique BBPS reference ID and receipt, ensuring end-to-end traceability and consumer protection.

BBPS API Features

  • 200+ Biller Categories: Electricity, gas, water, broadband, DTH, insurance, loan EMI, municipal taxes, education fees, and more.
  • Fetch & Pay: Two-step process — fetch bill details first, then confirm payment. Prevents overpayment or wrong-biller errors.
  • Multiple Payment Modes: Support for UPI, debit card, net banking, wallets, and cash (via agents).
  • Real-Time Confirmation: Instant payment confirmation with BBPS reference number.
  • Complaint Resolution: Built-in dispute resolution mechanism through NPCI.
  • Commission Structure: Earn commission on every bill payment processed through your platform.

Why Integrate BBPS API?

Revenue Generation

Every bill payment processed through your BBPS integration earns commission. At scale, this becomes a significant revenue stream — especially for fintech apps and banking platforms.

Customer Retention

Offering bill payment within your app reduces the need for customers to switch to other platforms. It becomes a sticky feature that drives daily engagement.

Regulatory Compliance

BBPS is RBI-mandated and NPCI-certified. Integrating through NxtBanking ensures your platform is fully compliant with all regulatory requirements.

Integration Steps with NxtBanking

Step 1: Register as BBPS Agent

Sign up on NxtBanking API Marketplace. We handle the NPCI registration process for you.

Step 2: Integrate Bill Fetch API

Use our Bill Fetch endpoint to retrieve bill details for any biller category. Pass the customer identifier (account number, mobile, etc.) and receive bill amount, due date, and biller details.

Step 3: Integrate Bill Payment API

Once the customer confirms, call the Bill Payment endpoint with the bill details and payment mode. The payment is routed through NPCI to the biller.

Step 4: Handle Callbacks

Receive real-time webhooks for payment confirmation, including the BBPS transaction reference number.

BBPS Biller Categories

CategoryExamplesVolume
ElectricityState discoms, BSES, Tata PowerHighest
TelecomJio, Airtel, Vi, BSNLHigh
DTHTata Play, Airtel Digital, Dish TVMedium
GasMahanagar Gas, Indraprastha GasMedium
WaterMunicipal corporationsMedium
InsuranceLIC, ICICI Prudential, HDFC LifeHigh
Loan EMIBanks, NBFCsHigh
EducationSchools, colleges, universitiesSeasonal

Frequently Asked Questions

What is BBPS API?

BBPS API is a programming interface that allows businesses to integrate Bharat Bill Payment System into their apps and platforms, enabling customers to pay bills for 200+ categories.

How do I become a BBPS agent?

You can become a BBPS agent by partnering with an authorized agent institution like NxtBanking. We handle the NPCI registration and provide ready-to-use APIs.

What commission do BBPS agents earn?

Commission varies by biller category, typically ranging from ₹2 to ₹15 per transaction. High-volume agents can negotiate better rates.

Is BBPS API integration free?

NxtBanking does not charge integration fees. You earn commission on every transaction, making it a zero-investment revenue opportunity. Request a demo to learn more.

Integrate BBPS API Today →

People Also Ask

How to become a BBPS agent?

You can become a BBPS agent by partnering with an existing COU (Customer Operating Unit) like NxtBanking. Requirements include valid business registration, KYC documents, and minimum working capital of ₹5,000-25,000.

What is the BBPS transaction limit?

BBPS does not have a fixed per-transaction upper limit set by NPCI, but individual billers may set their own limits. Most utility billers accept payments up to ₹2 lakh per transaction. Higher limits are available for insurance and loan EMI payments.

Related Resources


BBPS API — Code Samples & Integration Reference

A complete BBPS (Bharat Bill Payment System) flow is always two API calls: Bill Fetch (look up the outstanding amount from the biller) and Bill Payment (debit the customer and confirm the payment to the biller). Below are working samples for both, plus dispute handling and reconciliation.

1. Fetch billers & their required parameters

Every biller category (electricity, gas, DTH, mobile post-paid, etc.) accepts different customer parameters. Start by fetching the canonical biller directory so you can render the right input fields in your UI.

curl -X GET "https://sandbox.nxtbanking.com/v1/bbps/billers?category=electricity&state=UP" 
  -H "Authorization: Bearer $ACCESS_TOKEN"

# Response (abbreviated)
{
  "billers": [
    {
      "biller_id":  "UPPCL00000UPR",
      "biller_name":"Uttar Pradesh Power Corp. Ltd. — Urban",
      "category":   "electricity",
      "parameters": [
        { "param_name": "Account Number", "param_type": "NUMERIC", "length": 12, "regex": "^[0-9]{12}$" }
      ],
      "supports_bill_fetch": true,
      "supports_bill_pay":   true,
      "partial_payment":     false
    }
  ]
}

2. Bill Fetch

Bill Fetch retrieves the due amount from the biller in real time. Cache the response only briefly (max 10 minutes) — some billers update amounts intraday.

// Node.js
const fetchRes = await axios.post(
  "https://sandbox.nxtbanking.com/v1/bbps/bill/fetch",
  {
    biller_id:    "UPPCL00000UPR",
    reference_id: `BF_${Date.now()}`,
    customer_params: { "Account Number": "123456789012" },
    customer_mobile: "9812345678",
  },
  { headers: { Authorization: `Bearer ${token}` } }
);

// Successful response
{
  "fetch_id":     "bf_f8k2m9p3",
  "biller_id":    "UPPCL00000UPR",
  "customer_name":"Anvesh Tiwari",
  "bill_number":  "E-2026-04-8821",
  "bill_date":    "2026-04-01",
  "due_date":     "2026-04-28",
  "amount":       2847.00,
  "currency":     "INR",
  "exact_payment_required": false,   // if true, customer must pay exactly this amount
  "bill_fetch_response_code": "000"  // "000" = success per BBPS specification
}

3. Bill Payment

Pay the bill using the fetch_id from step 2. If the biller supports partial payments, you can send a lower amount; otherwise it must equal the fetched amount.

curl -X POST https://sandbox.nxtbanking.com/v1/bbps/bill/pay 
  -H "Authorization: Bearer $ACCESS_TOKEN" 
  -H "Content-Type: application/json" 
  -d '{
    "fetch_id":          "bf_f8k2m9p3",
    "reference_id":      "BP_1745334662_C42",
    "amount":            2847.00,
    "payment_instrument":"UPI",
    "payment_ref_id":    "UPI_NXTB_2026042200001",
    "customer_mobile":   "9812345678",
    "webhook_url":       "https://yourapp.com/webhooks/nxtb/bbps"
  }'

# Response
{
  "payment_id":  "bp_k9x4m2n8",
  "bbps_txn_id": "NB00XYZ123456789",  // the end-to-end BBPS reference
  "status":      "SUCCESS",
  "amount":      2847.00,
  "fee":         3.54,
  "cgst":        0.32,
  "sgst":        0.32,
  "response_code":"000",
  "receipt_url": "https://api.nxtbanking.com/receipts/bp_k9x4m2n8.pdf"
}

Python helper — full fetch-then-pay flow

import requests, time, uuid

BASE   = "https://sandbox.nxtbanking.com/v1"
TOKEN  = get_token()   # see Connected Banking guide
HEADERS = { "Authorization": f"Bearer {TOKEN}" }

def pay_electricity_bill(account_number, biller_id="UPPCL00000UPR",
                         customer_mobile="9812345678"):
    # 1. Fetch
    fetch = requests.post(
        f"{BASE}/bbps/bill/fetch",
        json={
            "biller_id":       biller_id,
            "reference_id":    f"BF_{uuid.uuid4().hex[:12]}",
            "customer_params": { "Account Number": account_number },
            "customer_mobile": customer_mobile,
        },
        headers=HEADERS, timeout=30,
    ).json()

    if fetch["bill_fetch_response_code"] != "000":
        raise Exception(f"Fetch failed: {fetch}")

    # 2. Pay the exact amount
    pay = requests.post(
        f"{BASE}/bbps/bill/pay",
        json={
            "fetch_id":           fetch["fetch_id"],
            "reference_id":       f"BP_{uuid.uuid4().hex[:12]}",
            "amount":             fetch["amount"],
            "payment_instrument": "UPI",
            "payment_ref_id":     f"UPI_{int(time.time())}",
            "customer_mobile":    customer_mobile,
        },
        headers=HEADERS, timeout=30,
    ).json()

    return pay

BBPS response codes you will see

BBPS response codes are standardised by NPCI. The 000 code means success; everything else is a business-level failure:

CodeMeaningAction
000Success
ERR001Biller not reachableRetry after 2–5 minutes
BFR-001Bill already paidShow receipt to user, don’t retry
BFR-002Invalid customer accountAsk user to re-verify the account number
BFR-003No outstanding duesShow “all clear” message
BPR-001Payment amount mismatch (exact-pay biller)Refetch and show the correct amount
BPR-002Biller timeoutCall GET /bbps/bill/status to confirm

Dispute handling

BBPS disputes follow a strict TAT-bound workflow. If a customer claims a payment didn’t reach the biller, raise a dispute within T+30 days:

curl -X POST https://api.nxtbanking.com/v1/bbps/disputes 
  -H "Authorization: Bearer $ACCESS_TOKEN" 
  -H "Content-Type: application/json" 
  -d '{
    "payment_id":   "bp_k9x4m2n8",
    "dispute_type": "BILL_NOT_UPDATED",
    "description":  "Customer reports biller portal still shows bill unpaid 48h after BBPS SUCCESS",
    "contact_email":"support@yourapp.com"
  }'

Dispute status updates arrive on the same webhook endpoint as bill payments. Valid dispute types include BILL_NOT_UPDATED, DOUBLE_DEBIT, AMOUNT_MISMATCH, and INVALID_BILL_STATUS.

Daily reconciliation

BBPS settlement files are published every day at 05:30 IST for the previous day’s transactions (T-1). Reconcile by calling the MIS endpoint or subscribing to the daily email drop.

curl -X GET "https://api.nxtbanking.com/v1/bbps/mis?date=2026-04-21&format=csv" 
  -H "Authorization: Bearer $ACCESS_TOKEN" 
  -o bbps_2026-04-21.csv

# CSV columns:
# payment_id, bbps_txn_id, reference_id, biller_id, customer_mobile,
# amount, fee, cgst, sgst, net_settlement, status, response_code,
# created_at, settled_at, bank_utr

For deeper architectural context on how BBPS routes between the COU (Customer Operating Unit), the BBPCU (central infrastructure), and the BOU (Biller Operating Unit), read our BBPS technical deep-dive. To launch a customer-facing BBPS product, see NxtBanking Bill Connect.

Know More