# List products

> The products you can vend, with their codes and amount rules.

Source: https://useroutegate.com/docs/api/public/listProducts

`GET /api/v1/catalog/products`

Filter by `network` and `service` codes. A `variable_amount` product takes any `amount_kobo` from `min_amount_kobo` to `max_amount_kobo` in steps of `step_kobo`; a `fixed_denomination` product costs `denomination_kobo`.

Authenticate with a bearer API key: `rg_test_` in test mode, `rg_live_` in live.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `network` | query | string | no | A network code from [List networks](/docs/api/public/listNetworks). |
| `service` | query | string | no | A service code from [List services](/docs/api/public/listServices). |

## Request

```bash
curl -X GET "https://api.useroutegate.com/api/v1/catalog/products?network=mtn&service=airtime" \
  -H "Authorization: Bearer $ROUTEGATE_API_KEY"
```

## Response

`200`

```json
{
  "success": true,
  "code": "OK",
  "message": "OK",
  "data": {
    "items": [
      {
        "code": "MTN-VTU",
        "network": "mtn",
        "service": "airtime",
        "name": "MTN Airtime",
        "kind": "variable_amount",
        "min_amount_kobo": 5000,
        "max_amount_kobo": 5000000,
        "step_kobo": 100
      }
    ]
  }
}
```

## Error

`401` `AUTH_REQUIRED`: The key is missing, unknown, revoked or expired. Every code is in [errors](/docs/concepts/errors).

```json
{
  "success": false,
  "data": null,
  "message": "Invalid API key",
  "code": "AUTH_REQUIRED"
}
```

## Give this to your coding agent

Read `https://useroutegate.com/docs/api/public/listProducts.md` and implement this call. Amounts are integers in kobo.
