Skip to main content
The BBPS for Customers (Customer Operating Unit, or COU) APIs enable Agent Institutions, entities that onboard customers and offer BBPS services, to integrate with the Bharat Bill Payment System (BBPS) network operated by NPCI. Using these APIs, Agent Institutions can build complete bill payment experiences for their customers across all registered BBPS billers.

Key features

Cashfree BBPS for Customers supports the following capabilities:
  • Biller discovery: Retrieve all active biller categories and MDM details, including customer input parameters, supported payment modes, and fee structures, to present accurate biller information before initiating a payment.
  • Async bill fetch and payment: By default, bill fetch and payment requests return a reference ID immediately. Poll the corresponding response endpoint at regular intervals until the operation returns a terminal status.
  • Synchronous responses: Optionally, receive the final bill fetch, validation, or payment result in the same API call, without polling.
  • Flexible payment flows: Supports FETCH_AND_PAY, VALIDATE_AND_PAY, and direct bill payment flows, determined automatically by biller configuration, across all BBPS categories. Direct bill payment is used for billers that do not require a prior fetch or validation step, such as donation billers.
  • Ticket management: Raise a support ticket for any processed transaction and poll its status using the Ticket APIs.
  • Wallet management: Check the agent institution wallet balance and retrieve paginated ledger history for reconciliation.

Authentication

All APIs use header authentication. Pass both headers in every request:
Credentials are issued per Agent Institution. Your x-client-id and x-client-secret are available in your Merchant Dashboard for both sandbox and production environments.

Versioning

All BBPS COU APIs require an x-api-version header in every request. The current supported version is 2025-01-01.
This value is pre-filled in the Try It playground on each API page.

Rate limits

All APIs are rate limited to 100 requests per 60 seconds. Exceeding the limit returns HTTP 429.

Synchronous responses

By default, the Bill Fetch Request and Bill Payment Request APIs are asynchronous. They return HTTP 202, and you poll the corresponding response API for the final result. With synchronous responses enabled, these APIs return the final result directly in the response, so you do not need to poll. If the result is not ready within the synchronous wait period, the API returns HTTP 202 as usual.
Synchronous responses are an opt-in feature and are disabled by default. To enable them for your account, contact your Cashfree account manager. You do not need to change your request format.
The following table explains each response status and what to do: The data.result object has the same format as the data object that the corresponding response API returns, so you can reuse your existing response handling. The following examples show Bill Payment Request responses for each outcome:

Handle synchronous responses

Even with synchronous responses enabled, some requests return HTTP 202, for example when the biller responds slowly. To handle both outcomes:
  1. Set your HTTP client timeout to at least 30 seconds for the Bill Fetch Request and Bill Payment Request APIs.
  2. Check the HTTP status code of the response.
  3. If the status code is 200, read the final status from data.status and the details from data.result.
  4. If the status code is 202, poll the corresponding response API using the polling strategy described on its page.
Do not resend a Bill Payment Request after a client timeout or an HTTP 202 response. Resending the request can create a duplicate payment. After an HTTP 202 response, poll the Bill Payment Response API for the final status.
Cashfree delivers webhooks as usual, whether the API returns HTTP 200 or HTTP 202. For details, see COU Webhooks.

API flow

A complete bill payment journey involves the following steps:
1

Fetch biller categories

Get the list of active biller categories, for example, ELECTRICITY, DTH, and GAS.
2

Fetch billers info

Get MDM details for billers in a category, including customer input parameters, supported payment modes, fetch requirements, and fee structures.
3

Bill fetch request

Initiate an async bill fetch, validation, or direct payment for the customer. Returns a ref_id immediately. The system determines the flow automatically based on biller configuration:
  • FETCH_AND_PAY returns bill details from the biller
  • VALIDATE_AND_PAY validates customer identity without fetching bill details
  • Direct bill payment skips the fetch step entirely and is used for billers such as donation billers
4

Poll bill fetch response

Poll using the ref_id at regular intervals until the response returns a terminal status. Refer to the polling strategy in the Bill fetch response API for recommended intervals and retry limits. If synchronous responses are enabled and the Bill Fetch Request API returned HTTP 200, skip this step.
5

Bill payment request

Submit the payment using data from the fetch response. Returns transaction_ref_id immediately.
6

Poll bill payment response

Poll using bill_fetch_ref_id and transaction_ref_id at regular intervals until the response returns a terminal status. Refer to the polling strategy in the Bill payment response API for recommended intervals and retry limits. If synchronous responses are enabled and the Bill Payment Request API returned HTTP 200, skip this step.
To raise a support ticket for a processed payment, use the Raise Ticket Request API after a payment is complete. Poll the Ticket Status API using the returned ref_id to track progress.

Billers

Fetch biller categories

Get all active biller category codes, such as ELECTRICITY, DTH, and GAS. Cache this list because it changes infrequently.


Fetch billers info

Get MDM details for billers in a category, including customer input parameters, supported payment modes, fetch requirements, and fee structures.