> ## Documentation Index
> Fetch the complete documentation index at: https://docs-v2.reeple.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Pay with USSD

> Let the customer authorise a payment by dialling a code on their phone

USSD lets a customer authorise a payment by dialling a short code on their phone, without a card
or a bank app. It is offered as a payment option on
[Pay an order](/api-reference/orders/pay-order).

<Warning>
  **Confirm availability before building against this.** USSD is listed as a supported method,
  but the provider has not published a pay-order payload for it, and
  `GET /charge/banks?paymentmethod=ussd` currently returns an empty bank list on sandbox. Check
  with Reeple whether USSD is enabled for your account and which banks it covers.
</Warning>

## Endpoint

```
POST https://api-v4.reeple.ai/charge/order/pay
```

Authenticate with your **public key**. See [Authentication](/api-reference/authentication).

## Checking whether it is offered

USSD only appears for orders whose currency supports it and on accounts where it is enabled.
The authoritative source is the [create-order](/api-reference/orders/create-order) response:

```json theme={null}
{
  "otherPaymentOptions": [
    { "code": "C", "name": "Card Payment", "currency": "NGN" },
    { "code": "USSD", "name": "USSD", "currency": "NGN" }
  ]
}
```

If `USSD` is absent, don't offer it.

## Payload (before encryption)

The common fields are the same as every other method:

| Field           | Type   | Description                        |
| --------------- | ------ | ---------------------------------- |
| `reference`     | String | **Required.** The order reference. |
| `paymentoption` | String | **Required.** `USSD`.              |
| `country`       | String | Optional. Two-letter country code. |

<Note>
  The USSD-specific object — most likely a bank selection, mirroring
  [bank transfer](/api-reference/payments/pay-with-bank-transfer)'s `BankTransfer.bankcode` — is
  **not documented by the provider**. Confirm the exact shape with Reeple before implementing.
</Note>

## Listing USSD banks

```bash theme={null}
curl "https://api-v4.reeple.ai/charge/banks?paymentmethod=ussd" \
  -H "api-key: YOUR_PUBLIC_KEY"
```

Banks that support USSD carry a `ussdBankCode` — that, rather than `bankCode`, is the value a
USSD flow needs. See [List banks](/api-reference/banks/list-banks).

```json theme={null}
{
  "data": [],
  "status": "success",
  "statusCode": "00",
  "message": "Operation successful"
}
```

<Note>
  An empty `data` array means no banks are currently enabled for USSD on your account. Treat that
  as "don't offer USSD" rather than an error.
</Note>

## What to expect

Once submitted, the response follows the same shape as every other method — a pending status you
poll to completion.

<Steps>
  <Step title="Display the dial string">
    The customer dials it on the phone number registered with their bank.
  </Step>

  <Step title="They authorise on their handset">
    Their bank prompts them to confirm and enter a PIN.
  </Step>

  <Step title="Poll for status">
    [Get order status](/api-reference/orders/get-order-status) until `isFinalStatus` is `true`.
    USSD typically settles in minutes.
  </Step>
</Steps>

## Alternatives

<CardGroup cols={2}>
  <Card title="Bank transfer" href="/api-reference/payments/pay-with-bank-transfer">
    Also needs no card, and is fully documented today.
  </Card>

  <Card title="Card" href="/api-reference/payments/pay-with-card">
    The most widely available method across currencies.
  </Card>
</CardGroup>
