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

# Discovery

> Discover available billers and services across categories

## Overview

Browse available billers by category to find the service you need. Monei supports hundreds of billers across multiple categories and countries.

**What you'll learn:**

* Get all billers
* Filter by category
* Search for specific billers
* Understand biller details
* Get service packages

***

## Get All Billers

Retrieve all available billers.

<CodeGroup>
  ```javascript Node.js theme={null}
  import MoneiSDK from 'monei-sdk';

  const monei = new MoneiSDK({
    apiKey: process.env.MONEI_API_KEY,
  });

  // Get all billers
  const billers = await monei.billsDiscovery.getBillers();

  console.log(`Total Billers: ${billers.length}\n`);

  billers.forEach(biller => {
    console.log(`${biller.name}`);
    console.log(`  Category: ${biller.category}`);
    console.log(`  Type: ${biller.type}`);
    console.log(`  Country: ${biller.country}`);
    console.log(`  Biller Code: ${biller.billerId}`);
  });
  ```

  ```python Python theme={null}
  from monei import MoneiClient

  monei = MoneiClient(
      api_key=os.getenv('MONEI_API_KEY')
  )

  # Get all billers
  billers = monei.bills_discovery.get_billers()

  print(f'Total Billers: {len(billers)}\n')

  for biller in billers:
      print(f'{biller.name}')
      print(f'  Category: {biller.category}')
      print(f'  Type: {biller.type}')
      print(f'  Country: {biller.country}')
      print(f'  Biller Code: {biller.billerCode}')
  ```

  ```bash cURL theme={null}
  curl https://api.monei.cc/api/v1/bills/billers \
    -H "x-api-key: YOUR_API_KEY"
  ```
</CodeGroup>

**Response:**

```json theme={null}
{
  "statusCode": 200,
  "message": "Billers retrieved successfully",
  "data": [
    {
      "billerId": "mtn-ng",
      "name": "MTN Nigeria",
      "shortName": "MTN",
      "category": "airtime",
      "country": "NG",
      "fee": 0,
      "minAmount": 50,
      "maxAmount": 50000
    }
  ]
}
```

***

## Filter by Category

Get billers for a specific category.

<CodeGroup>
  ```javascript Node.js theme={null}
  // Get airtime billers
  const airtimeBillers = await monei.billsDiscovery.getBillers({
    category: 'airtime'
  });

  console.log('Airtime Providers:\n');
  airtimeBillers.forEach(b => {
    console.log(`${b.name} (${b.shortName})`);
    console.log(`  Fee: ₦${b.fee}`);
    console.log(`  Min: ₦${b.minAmount}, Max: ₦${b.maxAmount}`);
  });

  // Get cable TV billers
  const cableBillers = await monei.billsDiscovery.getBillers({
    category: 'cable_tv'
  });

  console.log('\nCable TV Providers:\n');
  cableBillers.forEach(b => {
    console.log(`${b.name}`);
  });

  // Get electricity billers
  const electricityBillers = await monei.billsDiscovery.getElectricityBiller();

  console.log('\nElectricity Providers:\n');
  electricityBillers.forEach(b => {
    console.log(`${b.name} (${b.type})`);
  });
  ```

  ```python Python theme={null}
  # Get airtime billers
  airtime_billers = monei.bills_discovery.get_billers(category='airtime')

  print('Airtime Providers:\n')
  for b in airtime_billers:
      print(f'{b.name} ({b.short_name})')
      print(f'  Fee: ₦{b.fee}')
      print(f'  Range: ₦{b.min_amount} - ₦{b.max_amount}')

  # Get cable TV
  cable_billers = monei.bills_discovery.get_billers(category='cable_tv')

  print('\nCable TV:\n')
  for b in cable_billers:
      print(f'{b.name}')

  # Get electricity
  electricity_billers = monei.bills_discovery.get_electricity_billers(category='electricity')

  print('\nElectricity:\n')
  for b in electricity_billers:
      print(f'{b.name} ({b.type})')
  ```

  ```bash cURL theme={null}
  # Get airtime billers
  curl "https://api.monei.cc/api/v1/bills/billers?category=airtime" \
    -H "x-api-key: YOUR_API_KEY"

  # Get cable TV billers
  curl "https://api.monei.cc/api/v1/bills/billers?category=cable_tv" \
    -H "x-api-key: YOUR_API_KEY"
  ```
</CodeGroup>

***

## Available Categories

| Category      | Description         | Common Billers                  |
| ------------- | ------------------- | ------------------------------- |
| `airtime`     | Mobile airtime      | MTN, Airtel, Glo, 9mobile       |
| `data`        | Mobile data bundles | MTN Data, Airtel Data, Glo Data |
| `cable_tv`    | TV subscriptions    | DStv, GOtv, StarTimes           |
| `electricity` | Power bills         | IKEDC, EKEDC, AEDC, PHED        |

***

## Biller Details

Each biller response includes:

| Field        | Description                    |
| ------------ | ------------------------------ |
| `billerCode` | Unique biller Codeentifier     |
| `name`       | Full biller name               |
| `shortName`  | Short/display name             |
| `category`   | Category (airtime, data, etc.) |
| `type`       | PREPAID or POSTPAID            |
| `country`    | Country code (NG)              |
| `fee`        | Service fee (₦)                |
| `minAmount`  | Minimum payment amount         |
| `maxAmount`  | Maximum payment amount         |

***

## Search for Billers

<CodeGroup>
  ```javascript Node.js theme={null}
  // Search by name
  function searchBillers(billers, searchTerm) {
    return billers.filter(b => 
      b.name.toLowerCase().includes(searchTerm.toLowerCase()) ||
      b.shortName.toLowerCase().includes(searchTerm.toLowerCase())
    );
  }

  // Get all billers
  const allBillers = await monei.billsDiscovery.getBillers();

  // Search for MTN
  const mtnBillers = searchBillers(allBillers, 'MTN');
  console.log('MTN Services:');
  mtnBillers.forEach(b => {
    console.log(`- ${b.name} (${b.category})`);
  });

  // Search for DStv
  const dstvBillers = searchBillers(allBillers, 'DStv');
  console.log('\nDStv Services:');
  dstvBillers.forEach(b => {
    console.log(`- ${b.name} (${b.type})`);
  });
  ```

  ```python Python theme={null}
  # Search function
  def search_billers(billers, search_term):
      term = search_term.lower()
      return [b for b in billers if 
              term in b.name.lower() or 
              term in b.short_name.lower()]

  # Get all
  all_billers = monei.bills_discovery.get_billers()

  # Search MTN
  mtn_billers = search_billers(all_billers, 'MTN')
  print('MTN Services:')
  for b in mtn_billers:
      print(f'- {b.name} ({b.category})')

  # Search DStv
  dstv_billers = search_billers(all_billers, 'DStv')
  print('\nDStv Services:')
  for b in dstv_billers:
      print(f'- {b.name} ({b.type})')
  ```
</CodeGroup>

***

## Get Service Packages

Some billers offer multiple packages (cable TV, data bundles).

<CodeGroup>
  ```javascript Node.js theme={null}
  // Get DStv packages
  const dstv = await monei.billsDiscovery.getBillers({
    category: 'cable_tv'
  }).then(billers => billers.find(b => b.shortName === 'DStv'));

  // Get packages for DStv
  const packages = await monei.billsDiscovery.getPackages({
    billerId: dstv.billerId
  });

  console.log('DStv Packages:\n');
  packages.forEach(pkg => {
    console.log(`${pkg.name}`);
    console.log(`  Code: ${pkg.code}`);
    console.log(`  Price: ₦${pkg.amount}`);
    console.log(`  Duration: ${pkg.validity || 'Monthly'}`);
    console.log('');
  });
  ```

  ```python Python theme={null}
  # Get DStv
  cable_billers = monei.bills_discovery.get_billers(category='cable_tv')
  dstv = next(b for b in cable_billers if b.short_name == 'DStv')

  # Get packages
  packages = monei.bills_discovery.get_packages(billerCode=dstv.billerCode)

  print('DStv Packages:\n')
  for pkg in packages:
      print(f'{pkg.name}')
      print(f'  Code: {pkg.code}')
      print(f'  Price: ₦{pkg.amount}')
      print(f'  Duration: {pkg.validity or "Monthly"}')
      print()
  ```

  ```bash cURL theme={null}
  curl "https://api.monei.cc/api/v1/bills/packages/dstv-ng" \
    -H "x-api-key: YOUR_API_KEY"
  ```
</CodeGroup>

**Response:**

```json theme={null}
{
  "statusCode": 200,
  "message": "Packages retrieved successfully",
  "data": [
    {
      "code": "dstv-compact",
      "name": "DStv Compact",
      "amount": 10500,
      "validity": "Monthly"
    },
    {
      "code": "dstv-compact-plus",
      "name": "DStv Compact Plus",
      "amount": 16200,
      "validity": "Monthly"
    },
    {
      "code": "dstv-premium",
      "name": "DStv Premium",
      "amount": 24500,
      "validity": "Monthly"
    }
  ]
}
```

***

## Popular Billers by Category

<Tabs>
  <Tab title="Airtime">
    **Mobile Networks**

    ```javascript theme={null}
    const airtime = await monei.billsDiscovery.getBillers({
      category: 'airtime'
    });

    // Popular: MTN, Airtel, Glo, 9mobile
    ```

    | Network | Biller Code | Min | Max     |
    | ------- | ----------- | --- | ------- |
    | MTN     | mtn-ng      | ₦50 | ₦50,000 |
    | Airtel  | airtel-ng   | ₦50 | ₦50,000 |
    | Glo     | glo-ng      | ₦50 | ₦50,000 |
    | 9mobile | 9mobile-ng  | ₦50 | ₦50,000 |
  </Tab>

  <Tab title="Data">
    **Data Bundles**

    ```javascript theme={null}
    const data = await monei.billsDiscovery.getBillers({
      category: 'data'
    });

    // Each network has multiple data plans
    ```

    | Network      | Plans Available        |
    | ------------ | ---------------------- |
    | MTN Data     | Daily, Weekly, Monthly |
    | Airtel Data  | Daily, Weekly, Monthly |
    | Glo Data     | Daily, Weekly, Monthly |
    | 9mobile Data | Daily, Weekly, Monthly |
  </Tab>

  <Tab title="Cable TV">
    **TV Subscriptions**

    ```javascript theme={null}
    const cable = await monei.billsDiscovery.getBillers({
      category: 'cable_tv'
    });

    // DStv, GOtv, StarTimes
    ```

    | Provider  | Packages     |
    | --------- | ------------ |
    | DStv      | 10+ packages |
    | GOtv      | 5+ packages  |
    | StarTimes | 8+ packages  |
  </Tab>

  <Tab title="Electricity">
    **Power Distribution**

    ```javascript theme={null}
    const electricity = await monei.billsDiscovery.getElectricityBiller({
      category: 'electricity'
    });

    // IKEDC, EKEDC, AEDC, etc.
    ```

    | Disco | Type               |
    | ----- | ------------------ |
    | IKEDC | Prepaid & Postpaid |
    | EKEDC | Prepaid & Postpaid |
    | AEDC  | Prepaid & Postpaid |
    | PHED  | Prepaid & Postpaid |
  </Tab>
</Tabs>

***

## Best Practices

<CardGroup cols={2}>
  <Card title="Cache Billers" icon="database">
    Cache billers list to reduce API calls
  </Card>

  <Card title="Filter Early" icon="filter">
    Use category filter to reduce response size
  </Card>

  <Card title="Search Efficiently" icon="magnifying-glass">
    Implement client-side search for better UX
  </Card>

  <Card title="Display Packages" icon="box">
    Show package details for cable TV and data
  </Card>

  <Card title="Show Fees" icon="money-bill">
    Display service fees upfront
  </Card>

  <Card title="Validate Limits" icon="ruler">
    Check min/max amounts before payment
  </Card>
</CardGroup>

***

## Next Steps

<CardGroup cols={2}>
  <Card title="Overview" icon="circle-info" href="/bill-payments/overview">
    Bill payments introduction
  </Card>

  <Card title="Validation" icon="check" href="/bill-payments/validation">
    Validate customer details
  </Card>

  <Card title="Payments" icon="credit-card" href="/bill-payments/payments">
    Make bill payments
  </Card>

  <Card title="History" icon="clock-rotate-left" href="/bill-payments/history">
    View payment history
  </Card>
</CardGroup>
