{"openapi":"3.1.0","info":{"title":"BancaStore Partner API","version":"1.1.0","description":"Партнёрский API. Все операции привязаны к аккаунту владельца bearer API-ключа."},"servers":[{"url":"https://api.bancastore.xyz"}],"components":{"securitySchemes":{"PartnerApiKey":{"type":"http","scheme":"bearer","bearerFormat":"Store API key"}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"]}}},"OrderQuoteRequest":{"type":"object","required":["product_id"],"additionalProperties":false,"properties":{"product_id":{"type":"integer","minimum":1},"quantity":{"type":"integer","minimum":1,"maximum":5000,"default":1,"description":"Проверьте min_quantity/max_quantity; итог включает оптовую скидку и округление до копеек."}}},"OrderRequest":{"type":"object","required":["product_id","expected_total"],"additionalProperties":false,"properties":{"product_id":{"type":"integer","minimum":1},"quantity":{"type":"integer","minimum":1,"maximum":5000,"default":1,"description":"Должно соответствовать диапазону количества товара из каталога."},"expected_total":{"type":"string","pattern":"^[0-9]+(?:\\.[0-9]{1,2})?$"}}},"CartItemRequest":{"type":"object","required":["quantity"],"additionalProperties":false,"properties":{"quantity":{"type":"integer","minimum":1,"maximum":5000}}},"CartCheckoutRequest":{"type":"object","required":["expected_total"],"additionalProperties":false,"properties":{"expected_total":{"type":"string","pattern":"^[0-9]+(?:\\.[0-9]{1,2})?$"}}},"TopUpRequest":{"type":"object","required":["provider","amount"],"additionalProperties":false,"properties":{"provider":{"type":"string","enum":["platega","cryptopay","xrocket","telegram"]},"amount":{"type":"integer","minimum":1}}},"BalancePromoRequest":{"type":"object","required":["code"],"additionalProperties":false,"properties":{"code":{"type":"string","minLength":1,"maxLength":50}}},"ReviewRequest":{"type":"object","required":["rating"],"additionalProperties":false,"properties":{"rating":{"type":"integer","minimum":1,"maximum":5},"text":{"type":"string","maxLength":2000}}}}},"paths":{"/health":{"get":{"summary":"Проверка доступности","responses":{"200":{"description":"Процесс работает"}}}},"/sub/{token}":{"get":{"summary":"Загрузить VPN-подписку по секретной персональной ссылке","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{43}$"}}],"responses":{"200":{"description":"Содержимое подписки и метаданные клиента"},"404":{"description":"Ссылка не найдена или отозвана"},"410":{"description":"Подписка-источник истекла"},"429":{"description":"Слишком частые запросы"},"503":{"description":"Прокси не настроен"}}},"head":{"summary":"Проверить статус и метаданные VPN-подписки","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{43}$"}}],"responses":{"200":{"description":"Заголовки профиля без содержимого"},"404":{"description":"Ссылка не найдена или отозвана"},"410":{"description":"Подписка-источник истекла"},"429":{"description":"Слишком частые запросы"}}}},"/docs":{"get":{"summary":"Документация API","responses":{"200":{"description":"HTML-документация"}}}},"/openapi.json":{"get":{"summary":"OpenAPI-контракт","responses":{"200":{"description":"OpenAPI 3.1 JSON"}}}},"/v1/me":{"get":{"summary":"Текущий аккаунт","security":[{"PartnerApiKey":[]}],"responses":{"200":{"description":"Привязанный аккаунт"},"401":{"description":"Нужен API-ключ"}}}},"/v1/categories":{"get":{"summary":"Категории каталога","security":[{"PartnerApiKey":[]}],"responses":{"200":{"description":"Активные категории"}}}},"/v1/products":{"get":{"summary":"Список и поиск товаров","security":[{"PartnerApiKey":[]}],"parameters":[{"name":"search","in":"query","schema":{"type":"string"}},{"name":"category_id","in":"query","schema":{"type":"integer","minimum":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Страница каталога"}}}},"/v1/products/{product_id}":{"get":{"summary":"Карточка товара","security":[{"PartnerApiKey":[]}],"parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Товар без содержимого складских единиц"},"404":{"description":"Товар не найден"}}}},"/v1/me/balance":{"get":{"summary":"Баланс аккаунта","security":[{"PartnerApiKey":[]}],"responses":{"200":{"description":"Баланс в валюте магазина"}}}},"/v1/me/operations":{"get":{"summary":"История операций","security":[{"PartnerApiKey":[]}],"responses":{"200":{"description":"Пополнения и списания аккаунта"}}}},"/v1/me/purchases":{"get":{"summary":"История покупок","security":[{"PartnerApiKey":[]}],"responses":{"200":{"description":"Список покупок без содержимого выдачи"}}}},"/v1/me/purchases/{purchase_id}":{"get":{"summary":"Чек покупки","security":[{"PartnerApiKey":[]}],"parameters":[{"name":"purchase_id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Чек и выдача только владельцу покупки"},"404":{"description":"Покупка не найдена"}}}},"/v1/referrals":{"get":{"summary":"Сводка рефералов","security":[{"PartnerApiKey":[]}],"responses":{"200":{"description":"Число рефералов и начисления"}}}},"/v1/referrals/earnings":{"get":{"summary":"История реферальных начислений","security":[{"PartnerApiKey":[]}],"responses":{"200":{"description":"Пагинированная история"}}}},"/v1/info":{"get":{"summary":"Информация о магазине","security":[{"PartnerApiKey":[]}],"responses":{"200":{"description":"FAQ, правила и контакты"}}}},"/v1/orders/quote":{"post":{"summary":"Расчёт заказа","security":[{"PartnerApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderQuoteRequest"}}}},"responses":{"200":{"description":"Серверный расчёт каталожной цены"}}}},"/v1/orders":{"post":{"summary":"Покупка товара с баланса","security":[{"PartnerApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderRequest"}}}},"responses":{"201":{"description":"Покупка и выдача"},"402":{"description":"Недостаточно средств"},"409":{"description":"Цена изменилась или товар недоступен"},"202":{"description":"API-заказ принят. supplier_orders содержит статус и ID; проверяйте GET /v1/supplier-orders/{order_id}, затем забирайте выдачу по purchase_ids."}}}},"/v1/cart":{"get":{"summary":"Корзина аккаунта","security":[{"PartnerApiKey":[]}],"responses":{"200":{"description":"Текущая корзина с серверными ценами"}}},"delete":{"summary":"Очистить корзину","security":[{"PartnerApiKey":[]}],"responses":{"200":{"description":"Корзина очищена"}}}},"/v1/cart/items/{product_id}":{"put":{"summary":"Установить количество товара в корзине","security":[{"PartnerApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CartItemRequest"}}}},"responses":{"200":{"description":"Строка корзины"}}},"delete":{"summary":"Удалить товар из корзины","security":[{"PartnerApiKey":[]}],"responses":{"200":{"description":"Строка удалена"}}}},"/v1/cart/checkout":{"post":{"summary":"Оформить корзину","security":[{"PartnerApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CartCheckoutRequest"}}}},"responses":{"200":{"description":"Покупки из корзины"},"402":{"description":"Недостаточно средств"},"202":{"description":"API-заказ принят. supplier_orders содержит статус и ID; проверяйте GET /v1/supplier-orders/{order_id}, затем забирайте выдачу по purchase_ids."}}}},"/v1/products/{product_id}/reviews":{"get":{"summary":"Отзывы товара","security":[{"PartnerApiKey":[]}],"responses":{"200":{"description":"Оценка и список отзывов"}}},"post":{"summary":"Оставить отзыв после покупки","security":[{"PartnerApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewRequest"}}}},"responses":{"201":{"description":"Отзыв создан"},"403":{"description":"Нужна завершённая покупка"},"409":{"description":"Отзыв уже оставлен"}}}},"/v1/products/{product_id}/stock-alert":{"post":{"summary":"Подписаться на пополнение","security":[{"PartnerApiKey":[]}],"responses":{"201":{"description":"Подписка активна"}}},"delete":{"summary":"Отписаться от уведомления о пополнении","security":[{"PartnerApiKey":[]}],"responses":{"200":{"description":"Подписка удалена"}}}},"/v1/balance/payment-methods":{"get":{"summary":"Доступные способы пополнения","security":[{"PartnerApiKey":[]}],"responses":{"200":{"description":"Только настроенные реальные провайдеры"}}}},"/v1/balance/payments":{"get":{"summary":"История платежей","security":[{"PartnerApiKey":[]}],"responses":{"200":{"description":"Платежи текущего аккаунта без внешних секретов"}}}},"/v1/balance/promos/redeem":{"post":{"summary":"Активировать балансный промокод","security":[{"PartnerApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BalancePromoRequest"}}}},"responses":{"201":{"description":"Промокод применён один раз к аккаунту"}}}},"/v1/balance/top-ups":{"post":{"summary":"Создать пополнение баланса","security":[{"PartnerApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopUpRequest"}}}},"responses":{"201":{"description":"Платёжная ссылка или Telegram-счёт"},"503":{"description":"Неопределённый результат создания счёта; используйте тот же ключ"}}}},"/v1/balance/payments/{payment_id}":{"get":{"summary":"Проверить платёж","security":[{"PartnerApiKey":[]}],"parameters":[{"name":"payment_id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Текущий статус и баланс владельца"},"404":{"description":"Платёж не найден"}}}},"/v1/supplier-orders":{"get":{"summary":"Последние 20 API-заказов текущего покупателя","security":[{"PartnerApiKey":[]}],"responses":{"200":{"description":"Статусы заказов и purchase_ids после выдачи, без закупочных цен и данных продавца"}}}},"/v1/supplier-orders/{order_id}":{"get":{"summary":"Статус своего API-заказа","security":[{"PartnerApiKey":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Текущий статус и purchase_ids"},"404":{"description":"Заказ не найден у текущего покупателя"}}}}}}