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

# Release Notes - 9.0.0 - July 2026

**Release Date:** July 2026

## TL;DR

* KES Airtel is now supported for both deposits and payouts in Kenya
* Capitec is now supported as a South Africa (ZAR) collection method, requiring a new `id_number` field
* Payout responses and callbacks now include an explicit `payment_step` field to distinguish the initial acknowledgement from the final outcome

## New Features & Updates

### 1. Kenya — Airtel Money Support (Deposits & Payouts)

Airtel Money is now a supported payment method for Kenya (KES), for both deposits and payouts. Pass `Airtel` as the `payment_method_type` to use it.

**Transaction limits** are the same as KES Send Money (B2C) payouts:

| Payment Channel | Transaction Type | Minimum (KES) | Maximum (KES) |
| --------------- | ---------------- | ------------- | ------------- |
| **Airtel**      | Payout, Deposit  | 10            | 250,000       |

#### Example request

```json theme={null}
{
  "client_id": "client_id",
  "params": {
    "amount": 500,
    "country_id": 1,
    "currency": "KES",
    "mobile": "2547xxxxxxx",
    "payment_method_type": "Airtel",
    "third_party_reference_1": ""
  },
  "salt": "salt_value",
  "sender": "Integration_name",
  "timestamp": "<YOUR_TIMESTAMP>",
  "signature": "0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx5"
}
```

See: [Kenya](/countries/kenya) and [Transaction Limits](/transaction-limitsv4#1-kenya)

***

### 2. South Africa — Capitec Support (New `id_number` Field)

Capitec is now supported as a South Africa (ZAR) collection method. Pass `capitec` as the `payment_method_type` to use it.

Capitec accounts are linked to the customer's South African ID number rather than a bank code, so requests for this method must also include `id_number`.

**New required field for Capitec collections:**

* `id_number` — The customer's South African ID number.

#### Example request

```json theme={null}
{
  "client_id": "your_client_id",
  "params": {
    "amount": 500,
    "id_number": "9001015800083",
    "callback_url": "https://webhook.site/",
    "country_id": 15,
    "currency": "ZAR",
    "mobile": "276xxxxxxxx8",
    "name": "John Doe",
    "payment_method_type": "capitec",
    "third_party_reference_1": "ZAR_DEPOSIT",
    "successful_url": "https://yoursite.com/payment/success",
    "failure_url": "https://yoursite.com/payment/failure"
  },
  "salt": "unique_salt",
  "sender": "Integration Name",
  "timestamp": "UNIX_timestamp",
  "signature": "generated_signature"
}
```

See: [South Africa Capitec Collections](../collect-v4#south-africa-zar-capitec-collections)

***

### 3. Payout `payment_step` — Distinguishing Initiation from Final Outcome

Payout responses and callbacks now include an explicit `payment_step` field so you can tell an initial acknowledgement apart from the terminal result:

* **`payment_step: 1`** — Included only in the initial API response when the payout was successfully initiated with the processor (`status_code: "000000"`). If initiation fails (`status_code: "000005"`), the response has no `payment_step` field at all. Either way, this is an acknowledgement of the request, not the final result.
* **`payment_step: 2`** — Included in the terminal callback, sent for both a successful and a failed transaction outcome. When present, treat the callback as final: act on whatever `status` and `statusCode` is in the payload.

#### Sample initial response (success)

```json theme={null}
{
    "success": true,
    "message": "Payment process initiated successfully.",
    "data": {
        "reference": "S000001234",
        "type": "MPESA Send Money",
        "total": 500,
        "creation_date": "2026-08-12T09:53:40.000000Z",
        "execution_date": "2026-08-12T09:53:44.000000Z",
        "from": "John Doe",
        "to": "254712345678",
        "invoice_date": "2026-08-12",
        "invoice_amount": 500,
        "payment_step": 1
    },
    "status_code": "000000"
}
```

#### Sample terminal callback (failed)

```json theme={null}
{
  "client_id": "Your client id",
  "params": {
    "account": "80xxxxx3",
    "amount": 10,
    "currency": "KES",
    "fee": 5,
    "message": "Payment was not transferred.",
    "mobile": "254123456789",
    "payee": "JohnDoe 123",
    "payment_channel": "Send Money",
    "payment_reference": "OID51",
    "payment_step": 2,
    "payoutId": "bd8f51a2-xxxx-xxxx-xxxx-xxxxx9a",
    "ref": "SII6ZH9PU0",
    "status": "failed",
    "statusCode": "000005",
    "transaction_date": "2024-09-18 00:00:00",
    "transaction_detail": "Disbursement made through M-Pesa Send Money",
    "type": "Pay out"
  },
  "salt": "salt value",
  "sender": "Integration name",
  "timestamp": 123,
  "signature": "7xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxb"
}
```

<Tip>
  The `message` field in the initial response describes the result of initiating the payout, and its exact wording may vary by processor or channel. Don't use it to determine success or failure — rely on `payment_step` and `status_code`/`status` instead.
</Tip>

See: [Making Payments](/making-payments-v4), [Collect Payments](/collect-v4), and [Callback URLs](/callback-urls)
