Android integration#

Setu provides ready to use URLs for the Android integration. Contact Setu to update your logo, colours, fonts as per your branding. You can reach out to billpay.support@setu.co for any further clarifications.

Step 1 — Implement web view in your app#

The following steps need to be taken for webview integration—

  1. Get link from the backend
  2. Open a webview and attach the android interface

This step gives a one time Setu URL to be used by your customer for the bill fetch or payment flow. The Create link API needs to be called when Android app wants to obtain a one time link to load Setu’s screen flow inside a webview.

None of the parameters aside from mobile number are mandatory, but depending on what is passed the returned link will display different UI.

You can have the following scenarios—

  • If no other input is passed, it will take the user to the home page with all BBPS categories.
  • If category code is passed, it will show user a list of billers in that category.
  • If category code and biller ID is passed, it will show the bill fetch form where a customer can enter their identifers (biller specified parameters)
  • If the category code, biller ID and parameters are passed, it will show the bill directly.

All query parameters should be url-encoded to escape special characters

The above request will return URL based on the input params. Here’s a sample—

"link": "https://cou-whitelabelled-dev.setu.co/cou/categories/5f1fb0db-b2ed-4222-bb2f-53d238df370a"

Switch control from your app to Setu#

The link returned by the API should be loaded within android in an activity class with a webview component

public class DisplayWebView extends AppCompatActivity {
WebView myWebView;
public static final String LINK = "com.example.emulator.LINK";
private class MyWebViewClient extends WebViewClient {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Uri.parse(url).getHost().contains(".setu.co")) {
return false;
// Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
return true;
public void onBackPressed(){
} else {
public boolean onKeyDown(int keyCode, KeyEvent event) {
// Check if the key event was the Back button and if there's history
if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
return true;
// If it wasn't the Back key or there's no web page history, bubble up to the default
// system behavior (probably exit the activity)
return super.onKeyDown(keyCode, event);
@SuppressLint({"SetJavaScriptEnabled", "AddJavascriptInterface"})
protected void onCreate(Bundle savedInstanceState) {
Intent intent = getIntent();
myWebView = findViewById(R.id.pswebview);
WebSettings webSettings = myWebView.getSettings();
MyWebViewClient client = new MyWebViewClient();
myWebView.addJavascriptInterface(new WebAppInterface(this), "Android");
String link = intent.getStringExtra(DisplayWebView.LINK);
myWebView.setDownloadListener(new DownloadListener() {
public void onDownloadStart(String url, String userAgent,
String contentDisposition, String mimetype,
long contentLength) {
Intent i = new Intent(Intent.ACTION_VIEW);

Here is a sample of the Java Interface class needed by the webview

public class WebAppInterface extends AppCompatActivity {
Context mContext;
/** Instantiate the interface and set the context */
WebAppInterface(Context c) {
mContext = c;
/** Unload webview */
public void unload() {
Intent intent = new Intent(mContext, MainActivity.class);

The interface will contain 1 method—

  • unload This should be used by the your app to dismiss the webview

Step 2 — Implement and test webhook (optional)#

This step is only required if you want to get real-time payment status and related details after bill payment is done by customer.

Setu provides a webhook that can be configured, for which you need to do the following

  1. Share the webhook URL
  2. Handle the notification

Share the webhook URL#

This step requires setting up and sharing a webhook URL to Setu which is capable of receiving the transaction notifications. The URL to setup this webhook must be shared with Setu via email to billpay.support@setu.co.

Handle the notification#

The notification consists of body an authentication header as well as a body/payload. The authentication header will be sent as X-BILL-WEBHOOK-API-KEY. The value for the same shall be communicated over email.

The following data will be sent as the payload via a POST call on the URL shared to receive the API notification. It will be triggered on completion of a transaction be it either success or failure.

"txnId": "ABC000000123",
"mobileNumber": "1234567890",
"status": "PAYMENT_SUCCESS",
"amount": "100.00"

The status field will contain one of the following values:

  • PAYMENT_SUCCESS Transaction completed successfully.
  • PAYMENT_FAILURE Transaction failed. Any money if deducted will be refunded.

The amount field will contain one of the following values:

  • A string value of the amount, rounded to two decimal places.
  • Empty value (null) for failed transactions where no amount is received.

All the values in the response payload are strings

Step 3 — Get Production credentials and go live#

Once you are done testing your integration, ensure that all KYC and legal agreements are submitted. Contact Setu for getting enabled on production.

Was this page helpful?