> ## 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 a bank transfer

> Issue a temporary account number for the customer to transfer into

The bank-transfer payload for [Pay an order](/api-reference/orders/pay-order). Reeple issues a
temporary account number; you display it, the customer transfers to it, and the order settles
when the bank confirms the funds.

## Endpoint

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

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

## Payload (before encryption)

| Field           | Type   | Description                                                      |
| --------------- | ------ | ---------------------------------------------------------------- |
| `reference`     | String | **Required.** The order reference.                               |
| `paymentoption` | String | **Required.** `BANK-TRANSFER`.                                   |
| `country`       | String | Optional. Two-letter country code.                               |
| `BankTransfer`  | Object | **Required.** See [Bank transfer object](#bank-transfer-object). |

### Bank transfer object

| Field      | Type   | Description                                                                            |
| ---------- | ------ | -------------------------------------------------------------------------------------- |
| `bankcode` | String | **Required.** The customer's bank, from [List banks](/api-reference/banks/list-banks). |

```json theme={null}
{
  "reference": "order-2026-0001",
  "paymentoption": "bank-transfer",
  "country": "NG",
  "BankTransfer": {
    "bankcode": "00017"
  }
}
```

<Note>
  `paymentoption` is matched case-insensitively here — both `bank-transfer` and `BANK-TRANSFER`
  work. The `code` returned in `otherPaymentOptions` is the uppercase form.
</Note>

## Request example

```bash theme={null}
curl -X POST https://api-v4.reeple.ai/charge/order/pay \
  -H "Content-Type: application/json" \
  -H "api-key: YOUR_PUBLIC_KEY" \
  -d '{ "data": "YOUR_ENCRYPTED_PAYLOAD" }'
```

## Response

```json theme={null}
{
  "data": {
    "paymentDetail": {
      "redirectUrl": "https://payment-v2.reeple.ai/redirect?t=aHR0cHM6Ly9jb3JlL...",
      "recipientAccount": "TRP3861273",
      "paymentReference": "BTP079497EB-9E5C-4C14-B187-834"
    },
    "bankTransferDetails": null,
    "orderPayment": {
      "orderPaymentReference": "REEPLE-PAYREF-EBC829A92BA44B05A8F6F64D78DB4328",
      "currency": "NGN",
      "statusId": 2,
      "orderPaymentResponseCode": "02",
      "orderPaymentResponseMessage": "pending bank notification",
      "orderPaymentInstrument": "TRP3861273",
      "totalAmount": 580,
      "fee": 80
    },
    "orderSummary": {
      "orderReference": "order-2026-0001",
      "totalChargedAmount": 580,
      "fee": 80,
      "statusId": 2,
      "status": "Pending",
      "paymentType": "BANK-TRANSFER"
    }
  },
  "status": "success",
  "statusCode": "02",
  "message": "Bank transfer order created successfully"
}
```

### Response fields

| Field                                 | Description                                                                                  |
| ------------------------------------- | -------------------------------------------------------------------------------------------- |
| `paymentDetail.recipientAccount`      | **The account number to show the customer.**                                                 |
| `paymentDetail.redirectUrl`           | A hosted page displaying the same transfer instructions, if you'd rather not build your own. |
| `orderPayment.orderPaymentInstrument` | The same account number, echoed.                                                             |
| `orderPayment.totalAmount`            | **The exact amount the customer must send** — order amount plus fee.                         |

<Warning>
  The customer must transfer `totalAmount`, not the order amount. In the example above the order
  is 500 but the customer sends **580**. Display `totalAmount`, and make it copyable.
</Warning>

<Warning>
  The account number is **temporary and single-use** — it belongs to this order only. Never
  cache it or reuse it for another payment.
</Warning>

## After you show the account number

<Steps>
  <Step title="Display the account number and exact amount">
    Both need to be copyable. A mistyped amount will not match the order.
  </Step>

  <Step title="Poll for status">
    [Get order status](/api-reference/orders/get-order-status) until `isFinalStatus` is `true`.
    Nothing happens until the customer actually sends the money.
  </Step>

  <Step title="Be patient, then reconcile">
    Transfers can take minutes to hours. Don't fail the order after a short timeout — leave it
    pending and reconcile from your backend. See [Order lifecycle](/order-lifecycle#polling).
  </Step>
</Steps>

## Finding a bank code

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

See [List banks](/api-reference/banks/list-banks).
