---
title: "Search Products"
method: GET
path: "/products"
tags: ["Catalog"]
---

# Search Products

`GET /products`

## Request

- Base URL: `https://vesremont.com/api/v1`
- URL: `https://vesremont.com/api/v1/products`
- Auth: none required

Find or browse current catalog products by name, model or SKU; returns a bounded page with an exact total. Get contextual filter IDs from get_catalog_filters and brand IDs from search_brands; do not guess IDs. Read a selected result with get_product; narrow overly broad queries. Public; no OAuth required. Read-only. HEAD is also supported and returns the same headers without a body.

## Query parameters

- `q` string: Storefront text search query. Omit to browse the catalog with the supplied section, brand and filters.
- `sort` 'id_sort' | 'price_min' | 'price_max': Catalog order: id_sort is the default ID order; price_min sorts cheapest first, price_max most expensive first.
- `page` integer: One-based result page, default 1. Do not combine with cursor; the existing offset window still applies.
- `per_page` integer: Maximum results per page, default 20. Keep the same value when following next_cursor.
- `cursor` string: Opaque next_cursor from the previous response. Keep the same filters/sort; do not combine with page. Expires after 15 minutes. Existing backend windows apply; not a frozen snapshot.
- `section_id` integer: Restrict to this real catalog section. Do not combine with filters.section_ids.
- `brand_id` integer: Restrict to this brand ID returned by search_brands or product data, not its display name.

## Response `200`

Successful operation.

- object
  - `items` object[], required
    - `id` integer, required
    - `sku` string
    - `name` string, required
    - `gtin` string, nullable: Barcode from the published catalog field, if present. Not a product ID and not inferred from the name or URL.
    - `url` string, uri, nullable, required
    - `description` string
    - `images` string[]
    - `price` object, nullable, required
      - `amount` number, required
      - `currency` 'RUB', required
      - `old_amount` number, nullable, required
      - `discount_percent` number, nullable, required
    - `stock` object, required: Both fields are the aggregate across the store warehouse network. They do not promise pickup today or a delivery lead time.
      - `local` number, nullable, required
      - `total` number, nullable, required
    - `requestable` boolean
    - `orderable` boolean, required
    - `availability` 'in_stock' | 'backorder' | 'preorder' | 'out_of_stock' | 'unavailable' | 'unknown', required
    - `updated_at` string, date-time, nullable, required
    - `brand` object, nullable
      - `id` integer, required
      - `name` string, required
      - `url` string, uri, nullable, required
    - `section` object, nullable
      - `id` integer, required
      - `name` string, required
      - `url` string, uri, nullable, required
    - `characteristics` object[]
      - `id` integer, required
      - `name` string, required
      - `value` string, required
  - `pagination` object, required
    - `page` integer, required
    - `per_page` integer, required
    - `total_items` integer, required
    - `total_pages` integer, required
    - `has_next` boolean, required
    - `has_prev` boolean, required
    - `next_cursor` string, nullable

## Other responses

- `400`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.
- `403`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.
- `404`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.
- `405`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.
- `406`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.
- `409`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.
- `413`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.
- `414`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.
- `415`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.
- `422`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.
- `429`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.
- `431`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.
- `500`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.
- `503`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.

---

[API](https://skmtc.dev/vesremont/apis/vesremont-public-api.md) · [All operations](https://skmtc.dev/vesremont/apis/vesremont-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/vesremont/apis/vesremont-public-api/revisions/3bfec100b67d?raw)
