SMM панель API: документация
SMM панель 4SNS PLUS принимает заказы из вашего Telegram бота или собственной панели через стандартный API v2.
Что такое API SMM панели?
API SMM панели позволяет программе получать список услуг, создавать заказы и проверять статус заказов и баланс без захода на сайт. 4SNS PLUS поддерживает стандартный формат API v2, который используют многие панели и боты, поэтому код, уже подключенный к другой панели, заработает сразу после замены URL и ключа.
Цены и баланс в API такие же, как на сайте. rate в ответе services равен цене за 1,000 (в долларах США) из прайса, а заказы через add списываются с баланса точно так же, как заказы на сайте, и тоже видны в истории заказов в личном кабинете. Суммы по отмененным и частичным заказам возвращаются на тот же баланс.
Основное
| Адрес (endpoint) | https://4snsplus.com/api/v2 |
| Метод | POST |
| Формат запроса | Поля формы (application/x-www-form-urlencoded, multipart) или тело JSON |
| Ответ | JSON; ошибки тоже приходят с HTTP 200 и полем error |
| Авторизация | Параметр key (ваш API ключ) в каждом запросе |
| Лимит запросов | 300 запросов в минуту на один ключ |
| Валюта | Доллар США (USD) |
Пример запроса
curl -X POST https://4snsplus.com/api/v2 \ -d key=YOUR_API_KEY \ -d action=balance
import requests
r = requests.post("https://4snsplus.com/api/v2", data={
"key": "YOUR_API_KEY",
"action": "add",
"service": 2210,
"link": "https://t.me/yourchannel",
"quantity": 1000,
})
print(r.json()) # {"order": 31877} or {"error": "..."}Как получить API ключ?
Как только первое пополнение зачислено на баланс, вы можете создать API ключ в разделе API ключ личного кабинета. Ключ показывается только один раз при создании, поэтому сохраните его в надежном месте. При создании нового ключа предыдущий сразу отключается.
Ключ отделен от токена аккаунта. В бот или на сервер добавляйте только API ключ, а токен аккаунта не указывайте нигде. Если вам кажется, что ключ стал известен другим, просто создайте новый на экране API ключа.
Список услуг (services)
Возвращает все услуги, доступные для заказа. rate это цена за 1,000 (USD), а при type Package это цена одного пакета. При type Custom Comments вместо количества вы отправляете список комментариев. category состоит из названия платформы и названия группы.
| Параметр | Описание |
|---|---|
| key | Ваш API ключ |
| action | services |
Пример ответа
[
{
"service": 2210,
"name": "Members - 30 Days Non Drop - 30 Days Refill",
"type": "Default",
"category": "Telegram - Members (30 Days Non Drop)",
"rate": "1.4300",
"min": "100",
"max": "50000",
"refill": true,
"cancel": false
}
]Создать заказ (add)
Создает заказ и списывает сумму с баланса. Сумма равна цене за 1,000, умноженной на количество; для Package это цена пакета, а для Custom Comments количеством считается число строк комментариев. Заказы доступны аккаунтам, у которых зачислено первое пополнение. order в ответе это ID вашего заказа.
| Параметр | Описание |
|---|---|
| key | Ваш API ключ |
| action | add |
| service | ID услуги (service из services) |
| link | Публичная ссылка. Для Telegram: t.me/name, закрытая ссылка-приглашение t.me/+code, пост t.me/name/123, бот t.me/botname. @name тоже принимается |
| quantity | Количество (в пределах min и max). Не нужно для Package и Custom Comments |
| comments | Только для Custom Comments. Один комментарий на строку, до 10,000 строк, до 500 символов в строке |
Пример ответа
{
"order": 31877
}Статус заказа (status)
Статус одного заказа. charge это фактически оплаченная сумма после возвратов (USD, 6 знаков после запятой), start_count это значение счетчика на старте заказа, remains это количество, которое еще не выполнено.
| Параметр | Описание |
|---|---|
| key | Ваш API ключ |
| action | status |
| order | ID заказа |
Пример ответа
{
"charge": "1.430000",
"start_count": "8120",
"status": "In progress",
"remains": "410",
"currency": "USD"
}Статус нескольких заказов (status, orders)
Проверяет до 100 заказов за раз, ID заказов перечисляются через запятую. Для ID, которых нет или которые не относятся к вашему аккаунту, на их месте возвращается ошибка.
| Параметр | Описание |
|---|---|
| key | Ваш API ключ |
| action | status |
| orders | Список ID заказов, например 1,10,100 |
Пример ответа
{
"1": { "charge": "0.300000", "start_count": "120", "status": "Completed", "remains": "0", "currency": "USD" },
"10": { "error": "Incorrect order ID" }
}Запрос докрутки (refill)
Для заказа услуги с периодом докрутки, который завершился со статусом Completed или Partial, отправьте запрос в течение периода докрутки, считая с момента завершения. На каждый заказ может быть один открытый запрос, с интервалом 24 часа между запросами.
| Параметр | Описание |
|---|---|
| key | Ваш API ключ |
| action | refill |
| order | ID заказа |
Пример ответа
{
"refill": 512
}Статус докрутки (refill_status)
Статус одного запроса на докрутку.
| Параметр | Описание |
|---|---|
| key | Ваш API ключ |
| action | refill_status |
| refill | ID докрутки (refill из ответа refill) |
Пример ответа
{
"status": "Completed"
}Баланс (balance)
Ваш баланс (USD, 6 знаков после запятой).
| Параметр | Описание |
|---|---|
| key | Ваш API ключ |
| action | balance |
Пример ответа
{
"balance": "84.120000",
"currency": "USD"
}Значения статуса заказа
| Pending | Принят. Передается в работу, ожидает старта, или оператор проверяет результат передачи |
| In progress | Выполняется |
| Completed | Выполнен полностью |
| Partial | Выполнен частично. Невыполненная часть возвращается на баланс |
| Canceled | Не выполнен. Полный возврат на баланс |
Значения статуса докрутки
| Pending | Запрос на докрутку принят |
| In progress | Докрутка выполняется |
| Completed | Докрутка выполнена |
| Rejected | Запрос на докрутку не принят |
Сообщения об ошибках
Ошибки приходят в JSON с полем error в ответе HTTP 200. В коде сначала проверяйте наличие поля error.
{
"error": "Not enough funds on balance"
}| Invalid API key | Ключ не указан, неверный или заменен новым ключом |
| Too many requests | Более 300 запросов в минуту. Повторите чуть позже |
| Incorrect action | Значения action нет в списке выше |
| Add funds first | Заказ с аккаунта, у которого еще не зачислено первое пополнение |
| Incorrect service ID | Нет доступной для заказа услуги с таким ID |
| Incorrect link | Ссылка пустая или не является веб адресом |
| Quantity out of range | Количество меньше минимального или больше максимального |
| Incorrect comments | Custom Comments пустые или превышают 10,000 строк или 500 символов в строке |
| Not enough funds on balance | Баланс меньше суммы заказа. Пополните баланс и закажите снова |
| Incorrect order ID | Заказа с таким ID нет в вашем аккаунте |
| Refill is not available for this service | У услуги нет периода докрутки |
| Order is not finished yet | Докрутка доступна, когда заказ в статусе Completed или Partial |
| Refill period has ended | Период докрутки, считая с завершения заказа, истек |
| Refill already requested | У этого заказа уже есть открытый запрос на докрутку |
| Refill already requested, try again later | С последнего запроса не прошло 24 часа |
| Incorrect refill ID | Докрутки с таким ID нет в вашем аккаунте |
Как подключить API SMM панели к боту Telegram?
1. Сохраните список услуг
Вызывайте services несколько раз в день и сохраняйте у себя ID услуги, название, rate, min и max. Цену для клиентов рассчитывайте, добавляя свою наценку к rate, а при заказе используйте сохраненный ID услуги без изменений.
2. Проверяйте количество и ссылку перед заказом
Если заранее проверять, что количество находится между min и max, а ссылка в формате t.me, ошибок Quantity out of range и Incorrect link станет гораздо меньше. Также полезно заранее проверить баланс через balance.
3. Проверяйте статус пачками
Проверяйте заказы в работе каждые несколько минут пачками по 100 через параметр orders. Так вы с запасом укладываетесь в лимит 300 запросов в минуту на ключ. Когда заказ переходит в Completed, Partial или Canceled, сообщите клиенту результат.
4. Докрутку запрашивайте только для завершенных заказов
Когда заказ услуги с докруткой переходит в Completed или Partial, можно отправить refill. Сохраните ID докрутки из ответа и следите за ходом через refill_status.
