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