API для реселлеров

Один эндпоинт, форма с полями key и action. Совместим со стандартным API v2 SMM-панелей — готовые модули магазинов и биллингов подключаются без правок.
Быстрый старт
Адрес
https://telegos.app/api/v2
Метод
POST
Формат тела
application/x-www-form-urlencoded
Ответ
JSON, всегда со статусом 200
Ключ передаётся полем key в теле запроса — заголовок Authorization здесь не используется. Кабинет работает на отдельном токене, поэтому сброс ключа не завершает вашу сессию в браузере.
Список услуг
Отдаёт весь прайс: id услуги для action=add, цену за 1000 и границы объёма.
ПолеЗначение
keyВаш ключ
actionservices
Запрос
curl -X POST https://telegos.app/api/v2 \
  -d key=ВАШ_КЛЮЧ \
  -d action=services
Ответ
[
  {
    "service": 101,
    "name": "Telegram Members · CIS",
    "type": "Default",
    "category": "Telegram Members",
    "rate": "0.90",
    "min": "50",
    "max": "10000",
    "refill": true,
    "cancel": true
  }
]
Создать заказ
Списывает стоимость с баланса сразу и возвращает номер заказа.
ПолеЗначение
keyВаш ключ
actionadd
serviceid услуги из action=services
linkСсылка на канал, пост или профиль
quantityОбъём заказа в пределах min…max
Запрос
curl -X POST https://telegos.app/api/v2 \
  -d key=ВАШ_КЛЮЧ \
  -d action=add \
  -d service=101 \
  -d link=https://t.me/example \
  -d quantity=500
Ответ
{
  "order": 23501
}
Интервальный заказ (drip-feed)
Те же поля плюс два: сколько запусков сделать и с какой паузой между ними. quantity здесь — объём одного запуска, списывается сумма за все запуски.
ПолеЗначение
runsЧисло запусков
intervalПауза между запусками в минутах
Запрос
curl -X POST https://telegos.app/api/v2 \
  -d key=ВАШ_КЛЮЧ \
  -d action=add \
  -d service=101 \
  -d link=https://t.me/example \
  -d quantity=100 \
  -d runs=5 \
  -d interval=60
Ответ
{
  "order": 23502
}
Статус заказа
start_count — счётчик на момент старта, remains — сколько ещё не долито.
ПолеЗначение
keyВаш ключ
actionstatus
orderНомер заказа
Запрос
curl -X POST https://telegos.app/api/v2 \
  -d key=ВАШ_КЛЮЧ \
  -d action=status \
  -d order=23501
Ответ
{
  "charge": "0.4500",
  "start_count": "3572",
  "status": "In progress",
  "remains": "157",
  "currency": "USD"
}
Статус нескольких заказов
До 100 номеров за запрос. Ответ — объект по номеру заказа: несуществующий приходит с error и не роняет остальные.
ПолеЗначение
keyВаш ключ
actionstatus
ordersНомера через запятую
Запрос
curl -X POST https://telegos.app/api/v2 \
  -d key=ВАШ_КЛЮЧ \
  -d action=status \
  -d orders=23501,23502,999999
Ответ
{
  "23501": {
    "charge": "0.4500",
    "start_count": "3572",
    "status": "Completed",
    "remains": "0",
    "currency": "USD"
  },
  "23502": {
    "charge": "0.9000",
    "start_count": "1204",
    "status": "In progress",
    "remains": "300",
    "currency": "USD"
  },
  "999999": {
    "error": "Incorrect order ID"
  }
}
Дозаливка
Доступна там, где услуга отдаёт refill: true. Ход дозаливки проверяется отдельным действием refill_status по её номеру.
ПолеЗначение
keyВаш ключ
actionrefill / refill_status
orderНомер заказа — для refill
refillНомер дозаливки — для refill_status
Запрос
curl -X POST https://telegos.app/api/v2 \
  -d key=ВАШ_КЛЮЧ \
  -d action=refill \
  -d order=23501
Ответ
{
  "refill": 412
}
Отмена
Доступна там, где услуга отдаёт cancel: true. Деньги за отменённое возвращаются на баланс.
ПолеЗначение
keyВаш ключ
actioncancel
ordersНомера через запятую
Запрос
curl -X POST https://telegos.app/api/v2 \
  -d key=ВАШ_КЛЮЧ \
  -d action=cancel \
  -d orders=23501,23502
Ответ
[
  { "order": 23501, "cancel": 1 },
  { "order": 23502, "cancel": { "error": "Incorrect order ID" } }
]
Баланс
ПолеЗначение
keyВаш ключ
actionbalance
Запрос
curl -X POST https://telegos.app/api/v2 \
  -d key=ВАШ_КЛЮЧ \
  -d action=balance
Ответ
{
  "balance": "19.61",
  "currency": "USD"
}
Статусы заказов
СтатусЧто значит
PendingЗаказ принят и ждёт отправки исполнителю
In progressИсполнение идёт
ProcessingЗаказ обрабатывается на стороне исполнителя
CompletedОбъём долит полностью
PartialДолита часть объёма, остаток возвращён на баланс
CanceledЗаказ отменён, списание возвращено
Ошибки
Ошибка приходит тем же кодом 200 и отличается наличием поля error: проверять надо тело, а не статус ответа. В пакетных действиях ошибка лежит внутри своего элемента и не отменяет остальные.
Ответ
{
  "error": "Incorrect request"
}