Reseller API

Покупка ключей с вашего баланса из своего бота или магазина. Цены, наличие и баланс — те же, что в Telegram-боте.

Начало работы

Базовый адрес: https://api.thomas-service.pro

Ключ API: в боте нажмите «🔑 API» → «Создать ключ». Кнопка появляется, когда администратор включил вам API. Ключ показывается один раз; при перевыпуске старый сразу перестаёт работать.

Авторизация: ключ в заголовке каждого запроса:

Authorization: Bearer rk_ваш_ключ

Не добавляйте ключ в адрес запроса и не показывайте его покупателям. Все суммы — в долларах, строкой с двумя знаками после точки.

Формат совместим с reseller API хабов: те же методы, поля и коды ошибок. Если ваш бот уже работал с таким API, достаточно поменять адрес и ключ.

GET/v1/account

Ваш логин и баланс.

curl "https://api.thomas-service.pro/v1/account" -H "Authorization: Bearer $API_KEY"
{
  "ok": true,
  "account": {"login": "seller", "balance_usd": "25.00", "api_key_prefix": "rk_AbCdEf…"}
}

GET/v1/products

Товары, ваши цены и сколько ключей можно купить сейчас. Для покупки используйте product_id.

curl "https://api.thomas-service.pro/v1/products" -H "Authorization: Bearer $API_KEY"
{
  "ok": true,
  "products": [{
    "product_id": 100001,
    "category": {"id": 1, "name": "PUBG Mobile · Android без root"},
    "position": {"id": 100001, "name": "ZOLO", "status": ""},
    "name": "Zolo 1Day",
    "price_usd": "0.55",
    "stock": 46
  }]
}

Список меняется: товары появляются и снимаются, цены и наличие обновляются. Перед продажей сверяйтесь с ним, номера товаров постоянные.

POST/v1/purchases

Покупка: списывает стоимость с баланса и возвращает ключи прямо в ответе. Заголовок Idempotency-Key обязателен — это ваш номер заказа (1–64 символа: A–Z a–z 0–9 _ - : ., хотя бы одна буква или цифра).

curl -X POST "https://api.thomas-service.pro/v1/purchases" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-12345678" \
  -d '{"product_id": 100001, "quantity": 1}'

201 Created — покупка выполнена:

{
  "ok": true,
  "purchase": {
    "client_order_id": "order-12345678",
    "order_id": 42,
    "product_id": 100001,
    "name": "ZOLO — Zolo 1Day",
    "quantity": 1,
    "unit_price_usd": "0.55",
    "total_price_usd": "0.55",
    "balance_usd": "24.45",
    "keys": ["PRODUCT-KEY"],
    "instruction_url": null
  }
}

Защита от двойного списания. Повторный запрос с тем же Idempotency-Key не создаёт новую покупку, а возвращает тот же заказ. При обрыве связи, таймауте, ответе 5xx или 503 purchase_pending повторяйте запрос с тем же ключом или запросите заказ методом ниже. Новый ключ — новая покупка.

Если поставщик отвечает долго, заказ принимается, деньги резервируются, а ответ — 503 purchase_pending. Повторяйте раз в 10–30 секунд с тем же ключом, пока не придут ключи (обычно минуты).

Если заказ не выполнен (например, закончились ключи), деньги возвращаются на баланс, а ответ — ошибка. Для новой попытки нужен новый Idempotency-Key.

Количество в одном заказе — от 1 до 10. Одновременно не больше 3 незавершённых заказов.

В ответе quantity — сколько ключей выдано. Если поставщик выдал меньше заказанного, total_price_usd — только за выданные, разница сразу возвращается на баланс.

GET/v1/purchases/{idempotency_key}

Повторно получить заказ: тот же ответ, что у покупки. 404 purchase_not_found — заказа с таким ключом не было, его можно создать.

curl "https://api.thomas-service.pro/v1/purchases/order-12345678" -H "Authorization: Bearer $API_KEY"

Ошибки

При ошибке: {"ok": false, "error": {"code": "…", "message": "…"}, "request_id": "…"}

HTTPКодЧто делать
400invalid_requestПроверьте JSON, product_id, quantity и Idempotency-Key.
401invalid_api_keyКлюч неверный, перевыпущен или доступ к API выключен.
402insufficient_balanceПополните баланс у администратора.
403access_deniedДоступ к боту или API закрыт администратором.
404product_not_foundТовара нет или он снят с продажи — обновите список товаров.
404purchase_not_foundЗаказа с таким Idempotency-Key нет.
409insufficient_stockНе хватает ключей — уменьшите количество или выберите другой товар.
409idempotency_conflictКлюч заказа уже использован для другого товара или количества.
409purchase_failedЗаказ не выполнен, деньги возвращены. Новая попытка — с новым ключом.
429too_many_requests, too_many_pendingПодождите: не чаще 120 запросов в минуту, не больше 3 незавершённых заказов.
503purchase_pendingЗаказ принят, ждём поставщика. Повторите с тем же ключом.
503temporarily_unavailableПоставщик временно недоступен, деньги не списаны. Повторите позже.
503service_unavailableСервис недоступен (связь, перезапуск). Покупка могла пройти — повторите с тем же Idempotency-Key.
500internal_errorПовторите с тем же Idempotency-Key.
404, 405, 413not_found, invalid_requestНеверный адрес, метод или слишком большое тело запроса (больше 16 КБ).