Panel SMM API: documentación
Panel SMM con API v2 estándar: pide los servicios de 4SNS PLUS desde tu bot de Telegram o desde tu propio panel.
¿Qué es la API de un panel SMM?
La API de un panel SMM permite que un programa obtenga la lista de servicios, haga pedidos y consulte el estado de los pedidos y el saldo sin pasar por la web. 4SNS PLUS admite el formato estándar de API v2 para paneles SMM que usan muchos paneles y bots, así que el código que ya conectaste a otro panel funciona al instante con solo cambiar la URL y la clave.
Los precios y el saldo de la API son los mismos que en la web. El rate de la respuesta de services equivale al precio por cada 1,000 (dólares estadounidenses) de la lista de precios, y los pedidos hechos con add se descuentan de tu saldo igual que los pedidos web y también aparecen en el historial de pedidos de tu panel. Los importes devueltos por pedidos cancelados o parciales vuelven al mismo saldo.
Datos básicos
| Endpoint | https://4snsplus.com/api/v2 |
| Método | POST |
| Formato de solicitud | Campos de formulario (application/x-www-form-urlencoded, multipart) o un cuerpo JSON |
| Respuesta | JSON; los errores también llegan como HTTP 200 con un campo error |
| Autenticación | Parámetro key (tu clave API) en cada solicitud |
| Límite de solicitudes | 300 solicitudes por minuto por clave |
| Moneda | Dólar estadounidense (USD) |
Ejemplo de solicitud
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": "..."}¿Cómo consigo una clave API?
En cuanto tu primera recarga se acredite en tu saldo, puedes crear una clave API desde el menú Clave API de tu panel. La clave se muestra una sola vez al crearla, así que guárdala en un lugar seguro. Al crear una clave nueva, la anterior se desactiva al instante.
La clave es distinta del token de tu cuenta. Pon solo la clave API en tu bot o servidor, nunca el token de tu cuenta. Si crees que tu clave quedó expuesta, simplemente crea una nueva en la pantalla de Clave API.
Lista de servicios (services)
Devuelve todos los servicios que puedes pedir. rate es el precio por cada 1,000 (USD) y, cuando type es Package, es el precio de un paquete. Cuando type es Custom Comments, envías una lista de comentarios en lugar de una cantidad. category es el nombre de la plataforma más el nombre del grupo.
| Parámetro | Descripción |
|---|---|
| key | Tu clave API |
| action | services |
Ejemplo de respuesta
[
{
"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
}
]Crear un pedido (add)
Crea un pedido y descuenta el importe de tu saldo. El importe es el precio por cada 1,000 multiplicado por la cantidad; en Package es el precio del paquete y en Custom Comments la cantidad es el número de líneas de comentarios. Los pedidos están disponibles en cuentas cuya primera recarga ya está acreditada. El valor order de la respuesta es el ID de tu pedido.
| Parámetro | Descripción |
|---|---|
| key | Tu clave API |
| action | add |
| service | ID del servicio (service de services) |
| link | Enlace público. Para Telegram: t.me/name, enlace de invitación privado t.me/+code, publicación t.me/name/123, bot t.me/botname. También se acepta @name |
| quantity | Cantidad (entre min y max). No hace falta en Package ni en Custom Comments |
| comments | Solo Custom Comments. Un comentario por línea, hasta 10,000 líneas y hasta 500 caracteres por línea |
Ejemplo de respuesta
{
"order": 31877
}Estado del pedido (status)
El estado de un pedido. charge es el importe realmente pagado después de reembolsos (USD, 6 decimales), start_count es el conteo al empezar el pedido y remains es la cantidad que aún no se ha entregado.
| Parámetro | Descripción |
|---|---|
| key | Tu clave API |
| action | status |
| order | ID del pedido |
Ejemplo de respuesta
{
"charge": "1.430000",
"start_count": "8120",
"status": "In progress",
"remains": "410",
"currency": "USD"
}Estado de varios pedidos (status, orders)
Consulta hasta 100 pedidos a la vez, con los ID de pedido separados por comas. Los ID que no existen o no son de tu cuenta reciben un error en su lugar.
| Parámetro | Descripción |
|---|---|
| key | Tu clave API |
| action | status |
| orders | Lista de ID de pedido, por ejemplo 1,10,100 |
Ejemplo de respuesta
{
"1": { "charge": "0.300000", "start_count": "120", "status": "Completed", "remains": "0", "currency": "USD" },
"10": { "error": "Incorrect order ID" }
}Solicitar una reposición (refill)
Para un pedido de un servicio con periodo de reposición que terminó como Completed o Partial, solicítala dentro del periodo de reposición contado desde que terminó. Cada pedido puede tener una solicitud abierta, con 24 horas entre solicitudes.
| Parámetro | Descripción |
|---|---|
| key | Tu clave API |
| action | refill |
| order | ID del pedido |
Ejemplo de respuesta
{
"refill": 512
}Estado de la reposición (refill_status)
El estado de una solicitud de reposición.
| Parámetro | Descripción |
|---|---|
| key | Tu clave API |
| action | refill_status |
| refill | ID de reposición (refill de la respuesta de refill) |
Ejemplo de respuesta
{
"status": "Completed"
}Saldo (balance)
Tu saldo (USD, 6 decimales).
| Parámetro | Descripción |
|---|---|
| key | Tu clave API |
| action | balance |
Ejemplo de respuesta
{
"balance": "84.120000",
"currency": "USD"
}Valores de estado del pedido
| Pending | Recibido. Se está transmitiendo, está a la espera de empezar o un operador está revisando el resultado del envío |
| In progress | En entrega |
| Completed | Entregado por completo |
| Partial | Entregado en parte. La parte no entregada se reembolsa a tu saldo |
| Canceled | No entregado. Reembolso total a tu saldo |
Valores de estado de la reposición
| Pending | Solicitud de reposición recibida |
| In progress | Reposición en entrega |
| Completed | Reposición entregada |
| Rejected | La solicitud de reposición no fue aceptada |
Mensajes de error
Los errores llegan como JSON con un campo error en una respuesta HTTP 200. En tu código, comprueba primero el campo error.
{
"error": "Not enough funds on balance"
}| Invalid API key | Falta la clave, es incorrecta o fue reemplazada por una nueva |
| Too many requests | Más de 300 solicitudes por minuto. Vuelve a intentarlo en un momento |
| Incorrect action | El valor de action no está en la lista anterior |
| Add funds first | Pedido desde una cuenta cuya primera recarga aún no está acreditada |
| Incorrect service ID | No hay ningún servicio disponible con ese ID |
| Incorrect link | El enlace está vacío o no es una dirección web |
| Quantity out of range | Por debajo de la cantidad mínima o por encima de la máxima |
| Incorrect comments | Custom Comments está vacío o supera 10,000 líneas o 500 caracteres por línea |
| Not enough funds on balance | El saldo es menor que el importe del pedido. Recarga y vuelve a pedir |
| Incorrect order ID | Ese ID de pedido no es de tu cuenta |
| Refill is not available for this service | El servicio no tiene periodo de reposición |
| Order is not finished yet | La reposición está disponible cuando el pedido está Completed o Partial |
| Refill period has ended | Ya pasó el periodo de reposición, contado desde que terminó el pedido |
| Refill already requested | Este pedido ya tiene una solicitud de reposición abierta |
| Refill already requested, try again later | Aún no han pasado 24 horas desde la última solicitud |
| Incorrect refill ID | Ese ID de reposición no es de tu cuenta |
¿Cómo conecto la API de un panel SMM a un bot de Telegram?
1. Guarda la lista de servicios
Llama a services unas cuantas veces al día y guarda en tus propios datos el ID, el nombre, el rate, el min y el max de cada servicio. Calcula el precio que muestras a tus clientes sumando tu margen al rate y usa el ID de servicio guardado tal cual al hacer el pedido.
2. Comprueba la cantidad y el enlace antes de pedir
Comprobar antes que la cantidad está entre min y max y que el enlace tiene formato t.me reduce los errores Quantity out of range e Incorrect link. También ayuda consultar el saldo con balance de antemano.
3. Consulta el estado por lotes
Consulta los pedidos en curso cada pocos minutos en lotes de 100 con el parámetro orders. Así te mantienes holgadamente dentro del límite de 300 solicitudes por minuto por clave. Cuando un pedido pase a Completed, Partial o Canceled, avisa a tu cliente del resultado.
4. Pide reposición solo de pedidos terminados
Cuando un pedido de un servicio con reposición pase a Completed o Partial, puedes enviar refill. Guarda el ID de reposición de la respuesta y sigue el progreso con refill_status.
