API-архитектура SmmPanelUS: Полная спецификация интеграции v2

2026-01-23 06:53:02 SmmPanelUS Team

Мы не предоставляем «услуги продвижения» в маркетинговом смысле. Мы предоставляем транзакционный инструмент обмена. SmmPanelUS функционирует как Execution Layer (Уровень Исполнения), принимающий стандартизированные запросы и распределяющий их по узлам исполнения.

Интеграция требует строгого соблюдения Rate Limiting и валидации данных на вашей стороне. В отличие от веб-интерфейса, API не прощает синтаксических ошибок. Любое нарушение формата данных приведет к отказу (Request Denial) на уровне входного фильтра. Это инженерный инструмент: вы отправляете JSON-payload, система ставит его в очередь, провайдер исполняет.

Архитектурная суть: Это атомарные транзакции. Запрос либо принят и списан с баланса, либо отвергнут. Промежуточных состояний «наполовину создан» не существует.

1. Базовый протокол и аутентификация

Взаимодействие происходит через HTTP POST запросы к единой точке входа. Архитектура не является классическим RESTful сервисом, это RPC-over-HTTP. Все действия определяются параметром `action`.

  • Endpoint: `https://smmpanelus.com/api/v2`
  • Content-Type: `application/json`
  • Auth: Параметр `key` (Ваш API Token) обязателен для каждого запроса.
SMM API Workflow Diagram: Client to Nodes Data Flow
Архитектура потока данных: Маршрутизация от сервера клиента к узлам исполнения.

2. Discovery: Получение списка услуг

Перед созданием заказа ваша система должна знать актуальные ID и параметры услуг. Метод `action=services` возвращает полный каталог. Мы рекомендуем кэшировать этот ответ (Redis/Memcached) с TTL минимум 24 часа, а не запрашивать его перед каждым заказом.


// Request
{
    "key": "YOUR_API_KEY",
    "action": "services"
}

// Response Example
[
    {
        "service": 1,
        "name": "Followers HQ",
        "type": "Default",
        "category": "Instagram",
        "rate": "0.90", // Стоимость за 1000
        "min": "50",
        "max": "10000",
        "refill": true, // Доступность авто-восстановления
        "cancel": true  // Возможность отмены
    }
]

Категоризация трафика (Routing Categories)

Параметр `type` определяет логику маршрутизации и необходимые поля:

Тип (Type) Назначение Специфика
Default / Package Стандартная очередь. Прямое исполнение.
Custom Comments Пользовательские комментарии. Требует поле `comments` (текст, разделенный `\n` или массив).
Mentions User Followers Упоминания подписчиков донора. Требует ссылку на пост и `username` донора.
Poll Голосование в опросах. Требует `answer_number` (номер варианта ответа).

3. Transaction: Создание заказа

Метод `add` инициирует списание средств и постановку задачи в очередь.

Спецификация параметров

Параметр Тип Описание
`service` integer ID услуги из каталога.
`link` string URL объекта. Валидируйте наличие `https://` и отсутствие пробелов.
`quantity` integer Количество. Строго `>= min` и `<= max`.
`runs` (опц.) integer Количество запусков (для Drip-feed).
`interval` (опц.) integer Пауза в минутах между запусками (для Drip-feed).

Drip-feed Архитектура

Если требуется растянуть выполнение во времени, используйте параметры `runs` и `interval`. Общий объем заказа рассчитывается формулой:

$$ TotalQuantity = Quantity \times Runs $$


// Response (Success)
{
    "order": 23501 // Сохраните этот ID для отслеживания
}

4. Monitoring: Статусы и Жизненный Цикл

Самая ресурсоемкая операция — проверка статусов. Использование одиночного метода `status` в цикле — архитектурная ошибка, которая приведет к блокировке по WAF.

Определения статусов (Lifecycle States)

  • Pending: Заказ в очереди на отправку провайдеру.
  • In progress: Провайдер принял заказ, идет выполнение.
  • Completed: Выполнено.
  • Partial: Частичное выполнение. Деньги за недоставленный остаток (`remains`) возвращены на баланс.
  • Canceled: Заказ отменен, полный возврат средств.
  • Processing: Промежуточный статус обработки.

Multi-Status (Best Practice)

Используйте `action=multi_status`, передавая до 100 ID заказов через запятую. Это снижает нагрузку на сеть в 100 раз.


// Request
{
    "key": "API_KEY",
    "action": "multi_status",
    "orders": "1, 10, 100"
}

// Response
{
    "1": {
        "charge": "0.27819",
        "start_count": "3572", // Счетчик на момент старта
        "status": "Partial",   // Частичное выполнение
        "remains": "157",      // Остаток (деньги за него возвращены)
        "currency": "USD"
    },
    "10": {
        "error": "Incorrect order ID"
    }
}

5. Advanced Lifecycle: Refill и Cancel

Управление сложными состояниями (восстановление, отмена) также поддерживает массовые операции.

Multi-Refill

Создание задач на восстановление для списка заказов.


// Request
{
    "key": "API_KEY",
    "action": "multi_refill",
    "orders": "1, 2, 3"
}

// Response
[
    {
        "order": 1,
        "refill": 1 // ID задачи на восстановление
    },
    {
        "order": 2,
        "refill": { "error": "Incorrect order ID" }
    },
    {
        "order": 3,
        "refill": { "error": "Refill not available for this service" } 
    }
]

Multi-Cancel

Попытка массовой отмены. Важно: Успешный запрос не гарантирует отмену, он гарантирует попытку отмены.


// Request
{
    "key": "API_KEY",
    "action": "cancel",
    "orders": "1, 99"
}

// Response
[
    {
        "order": 1,
        "cancel": 1 // Успешно принят запрос на отмену
    },
    {
        "order": 99,
        "cancel": { "error": "Order is already completed" }
    }
]

6. Финансы: Проверка баланса

Для автоматизации биллинга используйте метод `balance`. Рекомендуется вызывать его не чаще раза в 5-10 минут или после серии крупных заказов.


// Request
{
    "key": "API_KEY",
    "action": "balance"
}

// Response
{
    "balance": "100.84292",
    "currency": "USD"
}

7. API Error Codes Reference (Troubleshooting Guide)

В распределенных системах ошибки — это норма. Ваш клиент должен обрабатывать их, не обрушивая весь пайплайн. Ответы сервера обычно имеют HTTP Status 200 OK, но содержат поле `error` в JSON теле.

Таблица кодов ошибок (API Error Codes)

Текст ошибки (Error String) Симптом Причина и Решение (Action)
`Incorrect request` Моментальный отказ (Reject). Причина: Неверный тип данных (строка вместо числа), отсутствуют обязательные поля (`link`, `quantity`).
Action: Логировать payload перед отправкой.
`Not enough funds` Заказ не создан. Причина: Баланс аккаунта ниже стоимости заказа.
Action: Настроить Low Balance Alert.
`Service not found` ID услуги возвращает ошибку. Причина: Услуга отключена или ID изменен.
Action: Обновлять список услуг методом `services` раз в 24 часа.
`Quantity too small/large` Отказ по лимитам. Причина: `quantity` выходит за пределы `min`/`max`.
Action: Синхронизировать лимиты перед отправкой.

Code Pattern: Python Wrapper

Пример надежной реализации запроса с обработкой таймаутов.


import requests
import json

class SmmPanelAPI:
    def __init__(self, api_key, base_url="https://smmpanelus.com/api/v2"):
        self.key = api_key
        self.url = base_url

    def _post(self, payload):
        payload['key'] = self.key
        try:
            # Жесткий таймаут: 5с на соединение, 30с на чтение
            response = requests.post(self.url, json=payload, timeout=(5, 30))
            response.raise_for_status()
            return response.json()
        except requests.exceptions.RequestException as e:
            # Логирование ошибки сети
            print(f"Network Error: {e}")
            return None

    def add_order(self, service_id, link, quantity):
        return self._post({
            "action": "add",
            "service": service_id,
            "link": link,
            "quantity": quantity
        })

    def get_multi_status(self, order_ids):
        # order_ids -> list of integers
        ids_str = ",".join(map(str, order_ids))
        return self._post({
            "action": "multi_status",
            "orders": ids_str
        })

8. Разграничение ответственности

Мы предоставляем транспортный уровень. Мы гарантируем, что валидный запрос будет принят и передан в сеть исполнения. Однако:

  • Мы не контролируем алгоритмы конечных платформ (Instagram, TikTok и др.).
  • Мы не валидируем качество ваших ссылок (закрытые профили, гео-блокировки — ответственность клиента).
  • Скорость выполнения зависит от текущей загрузки глобальных шлюзов.

9. FAQ: Часто задаваемые технические вопросы

Является ли API идемпотентным?
Нет. API не поддерживает идемпотентность по умолчанию. Если вы отправите запрос `add` дважды с одинаковыми параметрами, система создаст два разных заказа и спишет средства дважды. Реализуйте защиту от дублей на своей стороне (например, генерируя уникальные Transaction ID и проверяя их перед отправкой).

Какой Rate Limit установлен на шлюзе?
Мы не публикуем жесткие цифры во избежание эксплойтов, но WAF настроен на блокировку аномальной активности. Рекомендуемая частота поллинга статусов — 1 раз в 15-20 минут (используйте `multi_status`). Одиночные запросы чаще 1 раза в секунду могут привести к временному бану IP.

Это RESTful API?
Технически — нет. Это JSON-RPC архитектура, реализованная поверх HTTP. Мы используем один URL для всех операций, а тип действия определяется параметром `action` в теле запроса, а не HTTP-методом.

Можно ли безопасно делать Retry при ошибке сети?
Только если вы не получили ответ от сервера (timeout). Если получен любой ответ (даже 5xx или JSON с ошибкой), повторная отправка без проверки статуса заказа может привести к дублированию. Сначала проверьте последние заказы через `action=status`.

Этот документ является технической спецификацией. Любые финансовые результаты зависят от настройки бизнес-логики на стороне партнера.

SmmPanelUS Team

Экспертная группа SmmPanelUS. Мы тестируем алгоритмы и публикуем только проверенные стратегии.