# Utility Payment

## Scope

This applies to scenarios where end users are making:

1. Utility bill payments
2. Airtime purchases

## Steps - Airtime Purchase

{% stepper %}
{% step %}

### Initiate Airtime Purchase Request

Call endpoint `/utilityPayment/v2/airtimePayment` to initiate an airtime purchase request

Status: `1-Waiting`
{% endstep %}

{% step %}

### Confirm OTP

Call endpoint `/common/sendOtp` to request for OTP, filling the value of `paymentId` to `businessId` parameter. Call endpoint `/common/confirmOperation` to confirm the OTP code received.

Status: `2-PROCESSING`

{% hint style="info" %}
The endpoint `/common/sendOtp` can also be used to resend OTP.
{% endhint %}
{% endstep %}

{% step %}

### Payment Processing

Status: `2-PROCESSING`&#x20;
{% endstep %}

{% step %}

### Get Payment Result

* Get it from `0007 - Utility Payment Result Notification`
* Query transaction status by calling the endpoint `/utilityPayment/paymentQuery`
  {% endstep %}
  {% endstepper %}

## Steps - Bulk Airtime Purchase

{% stepper %}
{% step %}

### Initiate Bulk Airtime Purchase Request

Call endpoint `/utilityPayment/v2/airtimeBulkPayment` to initiate an airtime purchase request

Status: `1-Waiting`
{% endstep %}

{% step %}

### Confirm OTP

Call endpoint `/common/sendOtp` to request for OTP, filling the value of `bulkPaymentOrderId` to `businessId` parameter. Call endpoint `/common/confirmOperation` to confirm the OTP code received.

Status: `2-PROCESSING`

{% hint style="info" %}
The endpoint `/common/sendOtp` can also be used to resend OTP.
{% endhint %}
{% endstep %}

{% step %}

### Payment Processing

Status: `2-PROCESSING`&#x20;
{% endstep %}

{% step %}

### Get Payment Result

* Get it from `0014 - Bulk Airtime Purchase Notification`
* Query transaction status by calling the endpoint `/utilityPayment/bulkPaymentQuery`
  {% endstep %}
  {% endstepper %}

## Steps - Utility Bill

{% stepper %}
{% step %}

### Query Utility Bill Due Information

Call endpoint `/utilityPayment/billQuery` to initiate an airtime purchase request
{% endstep %}

{% step %}

### Initiate Utility Bill Payment Request

Call endpoint `/utilityPayment/v2/billPayment` to initiate an airtime purchase request

Status: `1-Waiting`
{% endstep %}

{% step %}

### Confirm OTP

Call endpoint `/common/sendOtp` to request for OTP, filling the value of `paymentId` to `businessId` parameter. Call endpoint `/common/confirmOperation` to confirm the OTP code received.

Status: `2-PROCESSING`

{% hint style="info" %}
The endpoint `/common/sendOtp` can also be used to resend OTP.
{% endhint %}
{% endstep %}

{% step %}

### Payment Processing

Status: `2-PROCESSING`&#x20;
{% endstep %}

{% step %}

### Get Payment Result

* Get it from `0007 - Utility Payment Result Notification`
* Query transaction status by calling the endpoint `/utilityPayment/paymentQuery`
  {% endstep %}
  {% endstepper %}

## Status

<figure><img src="/files/3xD65LRAO04libeOWCMX" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://choice-bank.gitbook.io/choice-bank/transfer/utility-payment.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
