Обновлено: 15.08.2026
Магазин клубной атрибутики
Каталог товаров и оформление заказов с доставкой или самовывозом со стадиона. Оплата баллами лояльности комбинируется с обычной оплатой в одном заказе.
Обзор методов
| Метод | Путь | Описание |
|---|---|---|
GET | /products | Каталог товаров |
POST | /shop-orders | Оформить заказ |
GET | /shop-orders/{id} | Статус заказа магазина |
GET | /products/{id} | Карточка товара |
POST | /products | Добавить товар |
Каталог товаров
GET /productsСписок товаров магазина с ценами и остатком на складе.
Параметры
| Параметр | Где | Тип | Обязателен | Описание |
|---|---|---|---|---|
in_stock | query | boolean | нет | Показывать только товары с остатком больше нуля. |
curl "https://api.virazh.io/v1/products?in_stock=true" \
-H "Authorization: Bearer sk_test_51H..."{
"data": [
{ "id": "prd_jersey_home", "name": "Домашняя футболка", "price": 4200, "stock": 58 },
{ "id": "prd_scarf", "name": "Клубный шарф", "price": 1100, "stock": 214 }
]
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
data | array<Product> | Товары с полями id, name, price, stock. |
Оформить заказ
POST /shop-ordersСоздаёт заказ на один или несколько товаров. Часть суммы можно списать баллами лояльности через поле points_amount.
Параметры
| Параметр | Где | Тип | Обязателен | Описание |
|---|---|---|---|---|
user_id | тело | string | да | Идентификатор покупателя. |
items | тело | array<Item> | да | Состав корзины: { product_id, qty } (и size, если товар размерный). |
points_amount | тело | integer | нет | Сумма к списанию баллами лояльности, не более лимита магазина. |
curl https://api.virazh.io/v1/shop-orders \
-X POST \
-H "Authorization: Bearer sk_test_51H..." \
-H "Content-Type: application/json" \
-d '{
"user_id": "usr_8f21c",
"items": [{ "product_id": "prd_scarf", "qty": 1 }],
"points_amount": 300
}'{
"order_id": "sord_5561",
"status": "pending_payment",
"amount_due": 800
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
order_id | string | Идентификатор созданного заказа. |
status | string | pending_payment сразу после создания. |
amount_due | integer | Остаток к оплате после списания баллов. |
Статус заказа магазина
GET /shop-orders/{id}Оплата, сборка и доставка заказа — для отображения статуса в личном кабинете покупателя.
Параметры
| Параметр | Где | Тип | Обязателен | Описание |
|---|---|---|---|---|
id | путь | string | да | Идентификатор заказа. |
curl https://api.virazh.io/v1/shop-orders/sord_5561 \
-H "Authorization: Bearer sk_test_51H..."{
"order_id": "sord_5561",
"status": "shipped",
"tracking_number": "RU123456789CN"
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
status | string | pending_payment, paid, packed, shipped или delivered. |
tracking_number | string | null | Трек-номер, если заказ отправлен доставкой. |
Карточка товара
GET /products/{id}Подробное описание товара — размерная сетка, фото, остаток по каждому размеру.
Параметры
| Параметр | Где | Тип | Обязателен | Описание |
|---|---|---|---|---|
id | путь | string | да | Идентификатор товара. |
curl https://api.virazh.io/v1/products/prd_jersey_home \
-H "Authorization: Bearer sk_test_51H..."{
"id": "prd_jersey_home",
"name": "Домашняя футболка",
"price": 4200,
"sizes": [
{ "size": "M", "stock": 12 },
{ "size": "L", "stock": 21 }
]
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
sizes | array<SizeStock> | Остатки по размерам: { size, stock }. |
Добавить товар
POST /productsСоздаёт карточку товара в каталоге магазина с ценой и остатками по размерам.
Параметры
| Параметр | Где | Тип | Обязателен | Описание |
|---|---|---|---|---|
name | тело | string | да | Название товара. |
price | тело | integer | да | Цена в рублях. |
sizes | тело | array<SizeStock> | нет | Размеры и остатки — если товар безразмерный, не передавайте. |
curl https://api.virazh.io/v1/products \
-X POST \
-H "Authorization: Bearer sk_test_51H..." \
-H "Content-Type: application/json" \
-d '{
"name": "Гостевая футболка",
"price": 4200,
"sizes": [{ "size": "M", "stock": 30 }, { "size": "L", "stock": 30 }]
}'{
"id": "prd_jersey_away",
"name": "Гостевая футболка",
"price": 4200
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
id | string | Идентификатор созданного товара. |
Полезно знать
- Поле
stockв каталоге — ориентировочный остаток; точная проверка наличия происходит при создании заказа,POST /shop-ordersможет вернуть409 conflict, если товар успели раскупить. - Оплата баллами (
points_amount) не может превышать долю, разрешённую настройками магазина клуба — обычно 30–50% от суммы заказа. - Самовывоз и доставка настраиваются на уровне заказа при оформлении в интерфейсе клуба; через API передаётся только состав корзины и способ оплаты.
- Остатки в каталоге товаров учитываются по размерам (
sizes[].stock), а не по товару целиком — проверяйте наличие конкретного размера перед показом кнопки «Купить».




