API v2.0 para Desarrolladores
Integra nuestros servicios SMM en tus aplicaciones con nuestra API REST. Compra seguidores, likes, vistas y más de forma programática.
Contenido
Información General
Base URL
https://bullsmm.social/api/v2
Formato de Respuesta
Todas las respuestas son en formato JSON.
Rate Limiting
Máximo 60 solicitudes por minuto por API Key + IP. Si excedes este límite recibirás un código 429 Too Many Requests.
Métodos HTTP
Usamos GET para consultas y POST para acciones (crear órdenes, refill, etc.).
Autenticación
Todas las solicitudes deben incluir tu API Key. Puedes generar tus keys desde tu perfil en el panel de control.
Header HTTP (Recomendado)
X-API-Key: tu_api_key_aqui
Parámetro GET/POST (Alternativo)
https://bullsmm.social/api/v2/balance?api_key=tu_api_key_aqui
Importante
Mantén tu API Key segura. No la compartas en repositorios públicos o código del lado del cliente. Si crees que tu key fue comprometida, regenérala desde tu perfil.
Consultar Balance
Obtén el saldo disponible de tu cuenta.
/api/v2/balance
Respuesta exitosa:
{
"status": "success",
"balance": 150.75,
"currency": "USD"
}
Listar Servicios
Obtén la lista completa de servicios disponibles con sus precios y detalles.
/api/v2/services
Respuesta exitosa:
{
"status": "success",
"services": [
{
"service": 123,
"name": "Instagram Seguidores - Alta Calidad",
"category": "Instagram",
"rate": 0.50,
"min": 10,
"max": 50000,
"is_active": true
}
]
}
Parámetros de cada servicio:
| Campo | Tipo | Descripción |
|---|---|---|
| service | integer | ID del servicio |
| name | string | Nombre del servicio |
| category | string | Categoría (Instagram, TikTok, etc.) |
| rate | float | Precio por unidad (1000) |
| min | integer | Cantidad mínima por orden |
| max | integer | Cantidad máxima por orden |
| is_active | boolean | Si el servicio está disponible |
Crear Orden
Crea una nueva orden para un servicio específico.
/api/v2/order
Parámetros:
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| service | integer | Sí | ID del servicio |
| link | string | Sí | URL del perfil/publicación |
| quantity | integer | Sí | Cantidad (entre min y max del servicio) |
| custom_data | string | No | Datos adicionales (ej: username para comentarios) |
Ejemplo de solicitud:
POST /api/v2/order Content-Type: application/json X-API-Key: tu_api_key { "service": 123, "link": "https://www.instagram.com/usuario", "quantity": 1000 }
Respuesta exitosa:
{
"status": "success",
"order": {
"id": 12345,
"service": 123,
"link": "https://www.instagram.com/usuario",
"quantity": 1000,
"charge": 0.50,
"status": "pending",
"created_at": "2026-04-30T12:00:00Z"
}
}
Órdenes Múltiples
Crea múltiples órdenes en una sola solicitud. Máximo 100 órdenes por lote.
/api/v2/orders
Ejemplo de solicitud:
POST /api/v2/orders Content-Type: application/json X-API-Key: tu_api_key { "orders": [ { "service": 123, "link": "https://instagram.com/usuario1", "quantity": 500 }, { "service": 456, "link": "https://tiktok.com/@usuario2", "quantity": 1000 } ] }
Respuesta exitosa:
{
"status": "success",
"orders": [
{ "id": 12345, "service": 123, "charge": 0.25, "status": "pending" },
{ "id": 12346, "service": 456, "charge": 0.50, "status": "pending" }
]
}
Estado de Orden
Consulta el estado actual de una orden específica.
/api/v2/status?order_id=12345
Parámetros:
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| order_id | integer | Sí | ID de la orden |
Respuesta exitosa:
{
"status": "success",
"order": {
"id": 12345,
"service": 123,
"link": "https://www.instagram.com/usuario",
"quantity": 1000,
"start_count": 0,
"remains": 1000,
"charge": 0.50,
"status": "In progress",
"created_at": "2026-04-30T12:00:00Z"
}
}
Posibles estados de una orden:
Refill (Reposición)
Solicita una reposición para una orden que no haya entregado la cantidad completa.
/api/v2/refill
Parámetros:
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| order_id | integer | Sí | ID de la orden a reponer |
Ejemplo de solicitud:
POST /api/v2/refill Content-Type: application/json X-API-Key: tu_api_key { "order_id": 12345 }
Respuesta exitosa:
{
"status": "success",
"message": "Refill solicitado correctamente para la orden #12345"
}
Historial de Órdenes
Obtén un listado de tus últimas órdenes con paginación.
/api/v2/orders
Parámetros opcionales:
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| page | integer | No | Número de página (default: 1) |
| per_page | integer | No | Resultados por página (default: 20, max: 100) |
Respuesta exitosa:
{
"status": "success",
"orders": [
{
"id": 12345,
"service": 123,
"link": "https://instagram.com/usuario",
"quantity": 1000,
"charge": 0.50,
"status": "Completed",
"created_at": "2026-04-30T12:00:00Z"
}
],
"pagination": {
"current_page": 1,
"last_page": 5,
"per_page": 20,
"total": 85
}
}
Ejemplos por Lenguaje
Ejemplos prácticos para integrar nuestra API en diferentes lenguajes de programación.
<?php // Configuración $apiKey = 'tu_api_key'; $url = 'https://bullsmm.social/api/v2/order'; // Datos de la orden $data = [ 'service' => 123, 'link' => 'https://www.instagram.com/usuario', 'quantity' => 1000 ]; $ch = curl_init($url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', "X-API-Key: $apiKey" ]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); $result = json_decode($response); print_r($result);
import requests import json # Configuración API_KEY = 'tu_api_key' URL = 'https://bullsmm.social/api/v2/order' # Datos de la orden data = { 'service': 123, 'link': 'https://www.instagram.com/usuario', 'quantity': 1000 } # Headers headers = { 'Content-Type': 'application/json', 'X-API-Key': API_KEY } # Solicitud response = requests.post(URL, json=data, headers=headers) result = response.json() print(json.dumps(result, indent=2))
const axios = require('axios'); // Configuración const API_KEY = 'tu_api_key'; const URL = 'https://bullsmm.social/api/v2/order'; // Datos de la orden const data = { service: 123, link: 'https://www.instagram.com/usuario', quantity: 1000 }; // Solicitud axios.post(URL, data, { headers: { 'Content-Type': 'application/json', 'X-API-Key': API_KEY } }) .then(response => { console.log(response.data); }) .catch(error => { console.error(error.response?.data || error.message); });
curl -X POST https://bullsmm.social/api/v2/order \ -H "Content-Type: application/json" \ -H "X-API-Key: tu_api_key" \ -d '{"service":123,"link":"https://www.instagram.com/usuario","quantity":1000}'
import okhttp3.*; import org.json.JSONObject; public class BullsmmApi { public static void main(String[] args) throws Exception { String apiKey = "tu_api_key"; JSONObject json = new JSONObject(); json.put("service", 123); json.put("link", "https://www.instagram.com/usuario"); json.put("quantity", 1000); OkHttpClient client = new OkHttpClient(); RequestBody body = RequestBody.create( json.toString(), MediaType.parse("application/json") ); Request request = new Request.Builder() .url("https://bullsmm.social/api/v2/order") .post(body) .addHeader("X-API-Key", apiKey) .build(); Response response = client.newCall(request).execute(); System.out.println(response.body().string()); } }
using System; using System.Net.Http; using System.Text; using Newtonsoft.Json; class Program { static async System.Threading.Tasks.Task Main() { var apiKey = "tu_api_key"; var url = "https://bullsmm.social/api/v2/order"; var data = new { service = 123, link = "https://www.instagram.com/usuario", quantity = 1000 }; var json = JsonConvert.SerializeObject(data); var content = new StringContent(json, Encoding.UTF8, "application/json"); content.Headers.Add("X-API-Key", apiKey); using var client = new HttpClient(); var response = await client.PostAsync(url, content); Console.WriteLine(await response.Content.ReadAsStringAsync()); } }
require 'net/http' require 'uri' require 'json' # Configuración api_key = 'tu_api_key' url = URI('https://bullsmm.social/api/v2/order') # Datos data = { service: 123, link: 'https://www.instagram.com/usuario', quantity: 1000 } # Solicitud http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Post.new(url) request['Content-Type'] = 'application/json' request['X-API-Key'] = api_key request.body = data.to_json response = http.request(request) puts JSON.pretty_generate(JSON.parse(response.body))
Códigos de Error
La API utiliza códigos HTTP estándar para indicar el resultado de las solicitudes.
| Código | Significado | Descripción |
|---|---|---|
| 200 | OK | Solicitud exitosa |
| 400 | Bad Request | Parámetros inválidos o faltantes. Revisa el mensaje de error. |
| 401 | Unauthorized | API Key inválida o no proporcionada. |
| 403 | Forbidden | Cuenta bloqueada o sin permisos. |
| 429 | Too Many Requests | Límite de 60 solicitudes/minuto excedido. Espera antes de reintentar. |
| 500 | Server Error | Error interno del servidor. Contacta a soporte si persiste. |
Formato de respuesta de error:
{
"error": true,
"message": "Descripción del error.",
"code": "ERROR_CODE"
}
Límites y Buenas Prácticas
Para garantizar la estabilidad y rendimiento de la API, sigue estas recomendaciones:
Rate Limiting
Máximo 60 solicitudes por minuto por API Key + IP. Si excedes este límite recibirás un error 429 Too Many Requests.
Las cabeceras de rate limit se incluyen en cada respuesta:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 42
X-RateLimit-Reset: 1682899200
Seguridad
- Nunca compartas tu API Key. Cada key es personal e intransferible.
- Usa HTTPS en todas tus solicitudes. La API no acepta conexiones HTTP.
- Si sospechas que tu key fue comprometida, regenerala inmediatamente desde tu perfil.
- Valida siempre los parámetros antes de enviarlos. La API rechazará datos inválidos.
Rendimiento
-
Usa el endpoint
/orders(batch) para múltiples órdenes en una sola solicitud. - Cachea la lista de servicios localmente. Los servicios no cambian con frecuencia.
- Implementa reintentos con backoff exponencial para errores 429 y 5xx.
- Máximo 100 órdenes por solicitud batch.
Errores Comunes
- 401 API Key faltante, inválida o expirada.
- 403 Usuario bloqueado o sin permisos suficientes.
- 422 Datos inválidos: service no existe, quantity fuera de rango, link mal formado.
- 402 Saldo insuficiente para completar la orden.
¿Necesitas ayuda?
Si tienes dudas sobre la integración o encuentras algún problema, abre un ticket de soporte desde tu panel de control o contáctanos a través de soporte@bullsmm.social. ¡Estamos aquí para ayudarte!