Reefox Stars API
HTTP API для продажи Telegram Stars и Premium из вашего бота, магазина или сервиса. Вы пополняете TON-баланс в кабинете Reefox, а API считает цену, резервирует сумму и доводит заказ до получателя.
Как это работает
Вы пополняете TON-баланс в кабинете reefox.ru и получаете API-ключ.
Ваш сервер проверяет получателя и, если нужно, узнаёт цену.
Ваш сервер создаёт заказ. Reefox резервирует сумму на балансе и ставит заказ в очередь выдачи.
Вы опрашиваете статус заказа, пока он не станет delivered или failed. Резерв списывается только после выдачи.
Адрес API
https://reefox.ru/api/v1Все запросы и ответы — JSON в UTF-8. Каждый ответ содержит поле ok: true при успехе, false при ошибке.
Авторизация
Передавайте API-ключ в заголовке каждого запроса:
Authorization: Bearer sk_live_••••••••••••sk_live_…— боевой ключ, заказы выдаются по-настоящему.sk_test_…— тестовый ключ, заказы проходят все статусы, но ничего не выдаётся.
Ключ — только на сервере
Не размещайте ключ в браузере, мобильном приложении или публичном репозитории: с ним можно тратить ваш баланс. Ключ показывается в кабинете один раз. Перевыпуск сразу отзывает прежний.
Идемпотентность
Для каждого нового заказа передавайте уникальный ключ:
Idempotency-Key: checkout_7812_attempt_1Если соединение оборвалось и вы не знаете, создался ли заказ, повторите тот же запрос с тем же ключом — Reefox вернёт исходный заказ, а не создаст второй. Если с уже использованным ключом прислать другие параметры, вернётся ошибка 409 idempotency_conflict.
Какой ключ брать
Удобно строить ключ из номера заказа в вашей системе, например shop-<id заказа>. Тогда один и тот же заказ невозможно отправить дважды, даже если его по ошибке обработают два процесса.
Первый заказ
curl https://reefox.ru/api/v1/orders \
-H "Authorization: Bearer sk_live_••••••••••••" \
-H "Idempotency-Key: checkout_7812" \
-H "Content-Type: application/json" \
-d '{
"product": "stars",
"recipient": "@username",
"quantity": 100,
"external_id": "order-7812"
}'Ответ 201:
{
"ok": true,
"id": "ord_…",
"status": "fulfillment_pending",
"amount": { "value": "1.275", "currency": "TON" },
"status_url": "https://reefox.ru/api/v1/orders/ord_…"
}Дальше опрашивайте status_url, пока статус не станет конечным. Все методы описаны в разделе Методы API, статусы и ошибки — в разделе Статусы и ошибки.