Бюро Цифровых Технологий

База знаний

Документация «Вираж»

База знаний по продуктам и API экосистемы «Вираж»: модули, методы, вебхуки — с примерами.

Обновлено: 15.08.2026

Магазин клубной атрибутики

Каталог товаров и оформление заказов с доставкой или самовывозом со стадиона. Оплата баллами лояльности комбинируется с обычной оплатой в одном заказе.

Обзор методов

МетодПутьОписание
GET/productsКаталог товаров
POST/shop-ordersОформить заказ
GET/shop-orders/{id}Статус заказа магазина
GET/products/{id}Карточка товара
POST/productsДобавить товар

Каталог товаров

Эндпоинт
GET /products

Список товаров магазина с ценами и остатком на складе.

Параметры

ПараметрГдеТипОбязателенОписание
in_stockquerybooleanнетПоказывать только товары с остатком больше нуля.
Запрос
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 }
  ]
}

Поля ответа

ПолеТипОписание
dataarray<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_idstringИдентификатор созданного заказа.
statusstringpending_payment сразу после создания.
amount_dueintegerОстаток к оплате после списания баллов.

Статус заказа магазина

Эндпоинт
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"
}

Поля ответа

ПолеТипОписание
statusstringpending_payment, paid, packed, shipped или delivered.
tracking_numberstring | 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 }
  ]
}

Поля ответа

ПолеТипОписание
sizesarray<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
}

Поля ответа

ПолеТипОписание
idstringИдентификатор созданного товара.

Полезно знать

  • Поле stock в каталоге — ориентировочный остаток; точная проверка наличия происходит при создании заказа, POST /shop-orders может вернуть 409 conflict, если товар успели раскупить.
  • Оплата баллами (points_amount) не может превышать долю, разрешённую настройками магазина клуба — обычно 30–50% от суммы заказа.
  • Самовывоз и доставка настраиваются на уровне заказа при оформлении в интерфейсе клуба; через API передаётся только состав корзины и способ оплаты.
  • Остатки в каталоге товаров учитываются по размерам (sizes[].stock), а не по товару целиком — проверяйте наличие конкретного размера перед показом кнопки «Купить».