● API работает

Green Like API
для партнёров

Полное руководство по подключению своего Telegram-бота, сайта или приложения к каталогу услуг Green Like.

https://api.greenlike.5-104-72-53.sslip.io/api/v2

Быстрый старт

  1. Откройте главный бот Green Like: Профиль → API для партнёров. В зеркалах API недоступен.
  2. Нажмите «Создать API-ключ», скопируйте его и сохраните в переменной окружения своего проекта.
  3. Выполните запрос services и сохраните нужный service — ID услуги.
  4. Перед созданием заказа проверьте баланс через balance, затем отправьте add.
  5. Сохраните полученный order и периодически проверяйте его через status.
API использует стандартную схему SMM Panel API v2: один endpoint и поле action, определяющее операцию.

Как работает API

Единый баланс

Деньги списываются с того же баланса, который отображается в профиле бота.

Актуальные цены

Каталог возвращает текущие цены главного бота.

Только главный бот

API-ключ, баланс и заказы привязаны к профилю главного Green Like. Зеркала API не выдают.

Свои ID заказов

В ответе возвращается внутренний ID Green Like. ID поставщика не раскрывается.

Все суммы указаны в российских рублях. Поле rate в каталоге — стоимость 1000 единиц услуги. Итоговая стоимость заказа рассчитывается сервером с учётом количества и округления до копеек.

Авторизация

Каждый запрос к /api/v2 должен содержать действующий API-ключ. Поддерживаются два способа.

Рекомендуемый: Bearer-заголовок

Authorization: Bearer ВАШ_API_КЛЮЧ

Совместимый: поле key

key=ВАШ_API_КЛЮЧ
Ключ показывается полностью только один раз. Если он потерян или скомпрометирован, перевыпустите его в профиле. Старый ключ сразу перестанет работать.
  • Не вставляйте ключ в ссылку и не отправляйте запросы методом GET.
  • Не храните ключ в открытом репозитории, JavaScript-коде браузера или логах.
  • Используйте переменную окружения, например GREENLIKE_API_KEY.

Формат запросов

Endpoint принимает только POST. Доступны два формата тела:

  • application/x-www-form-urlencoded — максимальная совместимость;
  • application/json — удобно для современных приложений.

Ответ всегда приходит в JSON, UTF-8. Успешный ответ зависит от метода. Ошибка имеет единый вид:

{
  "error": "Описание ошибки на русском языке"
}
Логическая ошибка параметров обычно возвращается с HTTP 200 и полем error. Поэтому всегда проверяйте наличие этого поля, а не только HTTP-код.
POSTaction=services

Получение каталога

Возвращает все активные услуги, текущие цены и допустимые ограничения. Получайте каталог регулярно: цены, названия и лимиты могут изменяться.

Запрос

curl -X POST 'https://api.greenlike.5-104-72-53.sslip.io/api/v2' \
  -H 'Authorization: Bearer ВАШ_API_КЛЮЧ' \
  -d 'action=services'

Ответ

[
  {
    "service": 123,
    "name": "Telegram просмотры — Россия",
    "type": "Default",
    "platform": "Telegram",
    "category": "Просмотры",
    "group": "Один пост",
    "description": "Быстрый старт. Просмотры из России...",
    "average_time": "12 мин.",
    "rate": "75.00",
    "min": 100,
    "max": 100000,
    "refill": false,
    "cancel": false
  }
]

Поля услуги

ПолеТипОписание
serviceintegerУникальный ID услуги. Передаётся в метод add.
namestringНазвание услуги для отображения пользователю.
typestringТип услуги поставщика.
platformstringПлощадка услуги: Telegram, Instagram, TikTok, YouTube и другие.
categorystringРаздел каталога.
groupstringБолее точная группа внутри раздела: география, вид публикации или другой признак.
descriptionstringПолное актуальное описание, требования к ссылке, скорость и особенности услуги. Может содержать переносы строк.
average_timestringСреднее фактическое время выполнения, например 12 мин. или 1 ч. 6 мин.. Пустая строка означает отсутствие статистики.
ratestringЦена за 1000 единиц в RUB.
minintegerМинимальное количество для одного заказа.
maxintegerМаксимальное количество для одного заказа.
refillbooleanЗаявлена ли возможность восстановления.
cancelbooleanЗаявлена ли возможность отмены.
POSTaction=add

Создание заказа

Создаёт заказ, списывает его стоимость с общего баланса и возвращает внутренний ID.

Параметры

ПолеОбязательностьОписание
serviceобязательноID активной услуги из services.
linkобязательноПубличная ссылка http:// или https://, подходящая выбранной услуге.
quantityобязательноЦелое число в диапазоне min…max.
idempotency_keyнеобязательно, рекомендуетсяУникальный ID заказа в вашей системе: 8–100 символов A-Z a-z 0-9 . _ : -.

Запрос

curl -X POST 'https://api.greenlike.5-104-72-53.sslip.io/api/v2' \
  -H 'Authorization: Bearer ВАШ_API_КЛЮЧ' \
  -d 'action=add' \
  -d 'service=123' \
  -d 'link=https://t.me/channel/10' \
  -d 'quantity=1000' \
  -d 'idempotency_key=my-order-2026-0001'

Успешный ответ

{
  "order": 1254
}
Всегда передавайте idempotency_key. Если ваш сервер не получил ответ и повторил запрос, тот же ключ вернёт уже созданный заказ вместо второго списания.

Один idempotency_key можно повторять только с теми же service, link и quantity. Повтор с другими параметрами будет отклонён.

Проверки перед отправкой

  • Услуга всё ещё присутствует в свежем каталоге.
  • Количество попадает в min…max.
  • Формат ссылки соответствует описанию услуги.
  • На балансе достаточно средств с небольшим запасом на изменение цены.

Если поставщик вообще не принял заявку, API вернёт ошибку, а зарезервированная сумма не останется списанной. После принятия поставщиком заказ считается созданным.

POSTaction=status

Проверка заказа

Возвращает текущее состояние заказа, его стоимость и оставшееся количество. Ключ может просматривать только заказы, созданные через него.

Параметры

ПолеОбязательностьОписание
orderобязательноID из ответа метода add.

Запрос и ответ

curl -X POST 'https://api.greenlike.5-104-72-53.sslip.io/api/v2' \
  -H 'Authorization: Bearer ВАШ_API_КЛЮЧ' \
  -d 'action=status' \
  -d 'order=1254'

{
  "charge": "75.00",
  "start_count": null,
  "status": "In progress",
  "remains": 420,
  "currency": "RUB"
}
ПолеОписание
chargeФактически списанная сумма.
start_countСтартовое значение; сейчас может быть null.
statusТекущий статус поставщика.
remainsОставшееся невыполненное количество.
currencyВалюта списания — RUB.

Основные статусы

СтатусЧто означает
PendingЗаказ принят и ожидает запуска.
In progressЗаказ выполняется.
CompletedЗаказ выполнен.
PartialЗаказ выполнен частично.
CanceledЗаказ отменён поставщиком.
ErrorЗаказ не был создан из-за ошибки.

Рекомендуемый интервал проверки активного заказа — 30–120 секунд. После конечного статуса постоянный опрос не нужен.

POSTaction=balance

Проверка баланса

Возвращает тот же баланс, который пользователь видит в профиле выбранного бота.

curl -X POST 'https://api.greenlike.5-104-72-53.sslip.io/api/v2' \
  -H 'Authorization: Bearer ВАШ_API_КЛЮЧ' \
  -d 'action=balance'

{
  "balance": "1540.75",
  "currency": "RUB"
}

Поля денежных значений возвращаются строками. Не используйте float для финансовых расчётов — применяйте Decimal или аналогичный денежный тип.

Ошибки и HTTP-коды

HTTPКогда возвращаетсяЧто делать
200Успех или логическая ошибка параметров с полем error.Разобрать JSON и проверить error.
401Ключ неверный, отключён или перевыпущен.Проверить ключ; при необходимости создать новый.
405Использован не POST-запрос.Переключить метод на POST.
413Слишком большое тело запроса.Передавать только необходимые поля.
429Превышен лимит запросов.Подождать и повторить с экспоненциальной задержкой.
500Временная внутренняя ошибка.Не создавать новый заказ вслепую; повторить с тем же idempotency_key.

Частые сообщения

ОшибкаПричина
Неверный или неактивный API-ключОшибка в ключе либо он был перевыпущен.
Услуга не найдена или отключенаКаталог устарел; запросите services заново.
Допустимое количество: …quantity находится за пределами услуги.
Недостаточно средствПополните общий баланс в профиле бота.
Заказ не найденID неверный или заказ создан другим API-ключом/в другом боте.
Поставщик временно не принял заказПовторите позже с новым idempotency_key.

Лимиты и безопасность

  • До 120 API-запросов в минуту на один ключ.
  • До 20 новых заказов в минуту на один ключ.
  • Запросы принимаются только по HTTPS.
  • Действует один API-ключ на аккаунт главного бота.
  • Перевыпуск не удаляет историю старых API-заказов, но отключает прежний секрет.

При HTTP 429 используйте задержки 2, 4, 8, 16 секунд. Не делайте мгновенные бесконечные повторы.

Готовые примеры кода

Python · requests

import os
import requests

API_URL = "https://api.greenlike.5-104-72-53.sslip.io/api/v2"
API_KEY = os.environ["GREENLIKE_API_KEY"]

def greenlike(action, **params):
    response = requests.post(
        API_URL,
        headers={"Authorization": f"Bearer {API_KEY}"},
        json={"action": action, **params},
        timeout=60,
    )
    response.raise_for_status()
    data = response.json()
    if "error" in data:
        raise RuntimeError(data["error"])
    return data

services = greenlike("services")
order = greenlike(
    "add",
    service=services[0]["service"],
    link="https://t.me/channel/10",
    quantity=1000,
    idempotency_key="my-order-2026-0001",
)
print(order["order"])

JavaScript · Node.js 18+

const API_URL = "https://api.greenlike.5-104-72-53.sslip.io/api/v2";
const API_KEY = process.env.GREENLIKE_API_KEY;

async function greenlike(action, params = {}) {
  const response = await fetch(API_URL, {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${API_KEY}`,
      "Content-Type": "application/json"
    },
    body: JSON.stringify({ action, ...params })
  });
  const data = await response.json();
  if (!response.ok || data.error) throw new Error(data.error || `HTTP ${response.status}`);
  return data;
}

const result = await greenlike("add", {
  service: 123,
  link: "https://t.me/channel/10",
  quantity: 1000,
  idempotency_key: "my-order-2026-0001"
});
console.log(result.order);

PHP · cURL

<?php
$apiUrl = 'https://api.greenlike.5-104-72-53.sslip.io/api/v2';
$apiKey = getenv('GREENLIKE_API_KEY');

$payload = [
    'action' => 'balance',
];

$curl = curl_init($apiUrl);
curl_setopt_array($curl, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode($payload),
    CURLOPT_TIMEOUT => 60,
]);
$data = json_decode(curl_exec($curl), true);
curl_close($curl);

if (isset($data['error'])) {
    throw new RuntimeException($data['error']);
}
print_r($data);

aiogram · обработчик заказа

import os
import uuid
import aiohttp

async def create_order(service_id: int, link: str, quantity: int):
    payload = {
        "action": "add",
        "service": service_id,
        "link": link,
        "quantity": quantity,
        "idempotency_key": str(uuid.uuid4()),
    }
    headers = {"Authorization": f"Bearer {os.environ['GREENLIKE_API_KEY']}"}
    timeout = aiohttp.ClientTimeout(total=60)
    async with aiohttp.ClientSession(timeout=timeout) as session:
        async with session.post("https://api.greenlike.5-104-72-53.sslip.io/api/v2", json=payload, headers=headers) as response:
            data = await response.json()
            if response.status != 200 or "error" in data:
                raise RuntimeError(data.get("error", f"HTTP {response.status}"))
            return int(data["order"])

Чек-лист интеграции

  1. Ключ хранится на сервере в переменной окружения.
  2. Каталог и цены обновляются автоматически хотя бы раз в час.
  3. Перед заказом проверяются min, max, ссылка и баланс.
  4. У каждого заказа есть постоянный уникальный idempotency_key.
  5. ID из ответа add сохраняется в вашей базе.
  6. Обрабатывается поле error даже при HTTP 200.
  7. Для HTTP 429 и 500 настроены ограниченные повторы с задержкой.
  8. Активные заказы проверяются не чаще одного раза в 30 секунд.
Не повторяйте заказ с новым idempotency_key, если не уверены, был ли принят предыдущий запрос. Сначала повторите запрос со старым ключом идемпотентности.