# GET /products — List products

The whole catalog with prices and an “on sale” flag.

Returns every catalog product, including ones taken off sale. Filter them yourself by `isAvailable`.

The response comes from a cache refreshed every 10 minutes, so a price change can show up here with a delay. Fresh data for one product: `GET /products/{id}/info`; a live stock check right before buying: `GET /products/{id}/availability`.

Authorization: header `X-Entity-Key`.

**Responses**

- `200 OK` — Catalog

```json
{
  "status": "success",
  "products": [
    {
      "id": 12,
      "title": "Dead by Daylight — Steam Key",
      "price": 1490,
      "currency": "RUB",
      "region": "ru",
      "platform": "steam",
      "isAvailable": true,
      "images": {
        "42x42": "https://cdn.example.com/p/12-42.png",
        "156x156": "https://cdn.example.com/p/12-156.png",
        "512x512": null
      }
    },
    {
      "id": 13,
      "title": "Dead by Daylight — Chapter DLC",
      "price": 590,
      "currency": "RUB",
      "region": "ru",
      "platform": "steam",
      "isAvailable": false,
      "images": {
        "42x42": "https://cdn.example.com/p/12-42.png",
        "156x156": "https://cdn.example.com/p/12-156.png",
        "512x512": null
      }
    }
  ]
}
```

- `401 Unauthorized` — No key

```json
{
  "status": "error",
  "message": "Missing X-Entity-Key header"
}
```

- `403 Forbidden` — Invalid key

```json
{
  "status": "error",
  "message": "Invalid entity key"
}
```

- `429 Too Many Requests` — Rate limited

```json
{
  "status": "error",
  "message": "Too many requests, try again later"
}
```

Web version: https://docs.merchant.dbdlobby.com/en/reference/list-products
