MagStore API
REST-подобный интерфейс поверх одного эндпойнта /resale/api.
Работает через GET (query-строка) и POST (JSON) — как в стандарте API.md.
Все ответы — JSON с единой оболочкой { success, message, data, timestamp, datetime },
либо text/plain для скачивания карточек товара.
https://shooac.top/resale/api
application/json
Авторизация
Все запросы к API требуют пары email + token. Токен выдаётся администратором вручную
и уникален для каждого клиента. Компрометацию токена сообщите администратору — он выпустит новый и мгновенно
отзовёт старый.
Способы передачи:
- GET-параметры:
?email=...&token=... - JSON-поля тела POST-запроса:
{"email":"...","token":"..."} - Заголовок:
Authorization: Bearer <token>
Формат ответа
Любой JSON-ответ обёрнут одинаково — можно распарсить одним типом:
// success { "success": true, "message": "ok", "data": { /* payload */ }, "timestamp": 1753900000, "datetime": "2026-07-30T18:26:40.000Z" } // error (HTTP 4xx/5xx) { "success": false, "message": "insufficient_funds", "data": null, "timestamp": 1753900000, "datetime": "2026-07-30T18:26:40.000Z" }
Все суммы — целое число «центов»: 1 USD = 10 000 единиц
(total_cents / 10000 === USD).
Баланс
Возвращает текущий баланс и персональную скидку.
GET /resale/api?action=balance&email={email}&token={token}
{
"success": true,
"data": {
"user_id": 42,
"login": "acme",
"balance_cents": 12500000, // $1250.00
"discount_percent": 10
}
}
Список товаров
Только товары, включённые администратором в канал MagStore. Цены уже уменьшены на вашу персональную скидку.
GET /resale/api?action=list&email={email}&token={token}
{
"success": true,
"data": [
{
"id": 1,
"code": "INST_2FA",
"name": "Long-Live Instagram Gmail",
"description": "...",
"discount_percent": 0,
"price_cents": 7000, // cheapest enabled tier (with discount)
"list_price_cents": 7000, // cheapest tier, undiscounted
"available": 16903, // total across enabled tiers
"tiers": [
{
"key": "t0_3", // pass this as tier_key on purchase
"label": "0–3 дня",
"price_cents": 7000, // $0.70 per unit (with discount)
"list_price_cents": 7000,
"available": 9021
},
{
"key": "t21",
"label": "21 день+",
"price_cents": 14500,
"list_price_cents": 14500,
"available": 7882
}
]
}
]
}
Каждый товар делится на возрастные интервалы (tiers) со своей ценой:
t0_3 (0–3 дня), t4_14 (4–14 дней),
t15_20 (15–20 дней), t21 (21 день+).
В ответе только включённые интервалы; поле key нужно
передавать как tier_key при покупке.
Один товар
Возвращает объект того же формата, что и элемент list.
# канонический вид GET /resale/api?action=product&goods_id={id}&email=…&token=… # API.md-совместимый вид GET /resale/api?action={id}&email=…&token=…
Покупка (V2)
Двухшаговый flow: шаг 1 — размещение заказа (списывает баланс атомарно), возвращает invoice_id.
Шаг 2 — забор содержимого по этому invoice_id (см. следующий раздел).
tier_key — возрастной интервал из списка товара
(t0_3, t4_14, t15_20, t21). Цена
и склад берутся именно из этого интервала.
POST /resale/api Content-Type: application/json { "email": "you@example.com", "token": "…", "action": "purchase_v2", "goods_id": 1, "tier_key": "t0_3", "quantity": 10 }
{
"success": true,
"data": {
"invoice_id": "29BF50fC037d14d",
"goods_id": 1,
"tier_key": "t0_3",
"quantity": 10,
"unit_price_cents": 7000,
"total_cents": 70000,
"list_price_cents": 7000,
"discount_percent": 0
}
}
curl -s https://shooac.top/resale/api \ -H "Content-Type: application/json" \ -d '{"email":"you@example.com","token":"…","action":"purchase_v2","goods_id":1,"tier_key":"t0_3","quantity":10}'
Содержимое заказа
Забирает карточки по invoice_id. Можно вызвать несколько раз — контент неизменен.
Через 24 часа после доставки контент удаляется — придёт 410 Gone / content_expired.
GET /resale/api?action=query_card&invoice_id={id}&email=…&token=…
{
"success": true,
"data": {
"invoice_id": "29BF50fC037d14d",
"goods_id": 1,
"quantity": 10,
"status": "delivered",
"card_content": "login:pass:cookie\nlogin:pass:cookie\n…",
"expired": false
}
}
GET /resale/api?action=query_card&invoice_id={id}&format=txt&email=…&token=…
Ошибки
| HTTP | message |
Значение |
|---|---|---|
| 401 | unauthorized | Неверный email/token или пользователь выключен. |
| 400 | unknown_action | Значение action не поддерживается. |
| 400 | missing_fields | Не указан goods_id, tier_key или quantity. |
| 400 | bad_tier | Неизвестный tier_key. |
| 400 | bad_quantity | Количество вне диапазона (1…5000). |
| 404 | product_not_found | Товар не существует / не в канале. |
| 409 | product_unavailable | Товар выключен администратором. |
| 409 | tier_unavailable | Интервал выключен / не задан для товара. |
| 409 | out_of_stock | Недостаточно единиц на складе. |
| 402 | insufficient_funds | Не хватает средств на балансе. |
| 410 | content_expired | Контент карточек уже удалён (>24 ч). |
| 429 | rate_limited | Превышен лимит запросов. |
| 500 | server_error | Внутренняя ошибка — повторите позже. |
Лимиты
- Rate-limit API: до 120 запросов в минуту с одного IP.
- Максимальное количество в одной покупке: 5000 единиц.
- Тело POST-запроса: не более 64 КБ.
- Токен — один активный на пользователя; ротация мгновенная.
Вопросы, ошибки, ротация токена — пишите администратору.