# GET /products/{id}/info — Product info

One product: title, price, currency, region, platform, status, images.

Read from the database on every request, without a cache — changes are visible immediately.

`isAvailable` is our own “on sale” flag. It does not guarantee the supplier has the product right now — use `GET /products/{id}/availability` for that.

Authorization: header `X-Entity-Key`.

**Path parameters**

| Name | Type | Required | Description |
|---|---|---|---|
| `id` | integer | yes | Product ID, a positive integer. Example: `12`. |

**Responses**

- `200 OK` — Product

```json
{
  "status": "success",
  "product": {
    "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
    }
  }
}
```

- `400 Bad Request` — Invalid ID

```json
{
  "status": "error",
  "message": "Invalid product id"
}
```

- `404 Not Found` — Product not found

```json
{
  "status": "error",
  "message": "Product not found"
}
```

- `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/product-info
