SMM Velox · API V1
Documentación API
Conecta tu sitio con el catálogo, saldo VND y pedidos de SMM Velox mediante la API.
Inicio rápido
POST · VND · HTTPSEnvía key/action en cuerpo application/x-www-form-urlencoded o JSON. Se rechazan parámetros URL. Producción requiere HTTPS. GET no admitido. Ejemplos ficticios.
Endpoint de API
https://smmvelox.com/api/v2curl -X POST 'https://smmvelox.com/api/v2' \
--data-urlencode 'key=YOUR_API_KEY' \
--data-urlencode 'action=add' \
--data-urlencode 'service=123' \
--data-urlencode 'link=https://example.com/post' \
--data-urlencode 'quantity=1000' \
--data-urlencode 'client_order_id=YOUR_UNIQUE_ORDER_ID' \
--data-urlencode 'max_charge=11550'Autenticación con clave API
Guarda la key en secreto y envíala solo en el cuerpo. Nunca en URL, código frontend ni compartida. Rotar/revocar tiene efecto inmediato. Cuenta activa y email verificado obligatorios.
Envía la clave solo en el cuerpo POST mediante HTTPS; nunca en la URL ni en código del navegador.
La API cotiza y cobra siempre en VND. El USD de la interfaz es solo informativo.
Lista de servicios
V1 solo Default con mapping/unidad verificados: rate es VND por 1.000 unidades; charge = rate × quantity / 1.000. service es DV-ID interno; order ID local estable en cadena. Sin ID del proveedor. Dinero decimal exacto hasta 12 posiciones.
key=YOUR_API_KEY&action=services[
{
"service": 123,
"name": "Example",
"desc": "",
"type": "Default",
"category": "Facebook",
"platform": "facebook",
"rate": "11550.000000000000",
"rate_unit": "per_1000",
"min": "100",
"max": "100000",
"refill": false,
"cancel": false,
"dripfeed": false,
"currency": "VND"
}
]Consultar saldo
La API cotiza y cobra siempre en VND. El USD de la interfaz es solo informativo.
key=YOUR_API_KEY&action=balance{
"balance": "100000.000000000001",
"currency": "VND"
}Crear pedido
add requiere service entero positivo, link http/https hasta 2.000 caracteres y quantity entero entre min/max. Rechaza price/rate/discount/currency/user_id/status/provider y campos desconocidos. status por lotes hasta 100 ID.
| Parámetro | Requisito | Descripción |
|---|---|---|
| key | Obligatorio | Clave API de la cuenta |
| action | Obligatorio | Acción add |
| service | Obligatorio | ID de servicio del catálogo API |
| link | Obligatorio | Enlace http/https al contenido |
| quantity | Obligatorio | Cantidad entera dentro de min/max |
| client_order_id | Opcional | Referencia única por cuenta para evitar pedidos duplicados |
| idempotency_key | Opcional | Alias de client_order_id; envía solo uno de los dos campos, nunca ambos |
| max_charge | Opcional | Cargo máximo aceptado (cadena VND), no es un precio elegido por el cliente |
key=YOUR_API_KEY&action=add&service=123&link=https://example.com/post&quantity=1000&client_order_id=YOUR_UNIQUE_ORDER_ID{
"order": "456"
}Estado de un pedido
Estados Pending/Processing/In progress/Completed/Partial/Canceled según evidencia. En revisión/desconocido devuelve Pending con review_required=true. start_count/remains null sin evidencia, nunca ceros inventados. charge usa instantánea pagada.
key=YOUR_API_KEY&action=status&order=456{
"charge": "11550",
"status": "Pending",
"start_count": null,
"remains": null,
"currency": "VND",
"review_required": false
}Estado de varios pedidos
La respuesta es un objeto indexado por ID; los ID desconocidos tienen errores individuales. Máximo 100 ID.
key=YOUR_API_KEY&action=status&orders=456,999{
"456": {
"charge": "11550",
"status": "Pending",
"start_count": null,
"remains": null,
"currency": "VND",
"review_required": false
},
"999": {
"error": "Incorrect order ID"
}
}Acciones no disponibles
Package/per_unit, custom comments, subscriptions, dripfeed no admitidos y ocultos. cancel/refill/refill_status devuelven HTTP 400 Action is not supported sin cambios ni reembolso automático. Los tres indicadores false en V1.
key=YOUR_API_KEY&action=cancel{
"error": "Action is not supported"
}Reglas de pedidos y estados
Envía client_order_id (o idempotency_key), 1–64 caracteres A–Z/a–z/0–9/_.:- único por cuenta. Mismo ID y service/link/quantity/max_charge devuelve pedido existente; contenido distinto devuelve 409. max_charge opcional es límite VND en cadena, no precio impuesto.
Sin ID de cliente cada add válido crea otro pedido aunque sea idéntico. No reintentes a ciegas tras timeout; no hay garantía exactly-once sin ID.
El servidor calcula los precios API. Los límites de seguridad pueden reducir el descuento efectivo; los precios web no cambian.
API OFF bloquea add incluso replay; keys válidas pueden leer services/balance/status. Envío sigue controles/colas sin prometer inmediatez. Pedidos API no generan comisión Affiliate.
Gestión de errores y reintentos seguros
IdempotenciaLa conexión puede fallar después de que se acepte el pedido y se cobre el saldo. Un timeout o HTTP 503 no demuestra que la solicitud no se procesó. Usa una referencia única por cada pedido previsto.
- Antes del primer add, genera un client_order_id único (o idempotency_key) y guárdalo junto con service, link, quantity y max_charge enviados.
- Si recibes un order ID, guárdalo y consulta action=status con order. No envíes otro add solo para consultar el estado.
- Si hay timeout o se pierde la respuesta y no tienes order ID, reintenta solo cuando la conexión y la API estén disponibles. Reenvía exactamente el mismo action=add, referencia y parámetros originales. No generes una referencia nueva.
- Si el reintento devuelve un order ID, sigue ese ID. Si sigue la incertidumbre, detén los reintentos automáticos repetidos y contacta con soporte indicando la referencia (nunca tu API Key).
Evita cobros duplicados
Cambiar u omitir client_order_id puede generar otro pedido y otro cargo. Conserva max_charge al reintentar; la misma referencia con service/link/quantity/max_charge distintos devuelve 409. Si la API está OFF, también se bloquean los reintentos de add.
curl -X POST 'https://smmvelox.com/api/v2' \
--data-urlencode 'key=YOUR_API_KEY' \
--data-urlencode 'action=add' \
--data-urlencode 'service=123' \
--data-urlencode 'link=https://example.com/post' \
--data-urlencode 'quantity=1000' \
--data-urlencode 'client_order_id=YOUR_UNIQUE_ORDER_ID' \
--data-urlencode 'max_charge=11550'action=status requiere el order ID; no permite buscar por client_order_id. Sin ID, repite el add idéntico cuando la API esté disponible o contacta con soporte.
Ejemplos de errores JSON y cómo actuar
Referencia en conflicto con otra solicitud o importe superior a max_charge. Detente y revisa datos y precio; no evites el error creando una nueva referencia.
{
"error": "Client order ID conflicts with an existing request"
}Parámetros o condiciones de compra no válidos. Revisa fields y corrige la causa antes de una solicitud nueva; no reintentes a ciegas.
{
"error": "Invalid request parameters",
"fields": [
"quantity"
]
}Límite de peticiones alcanzado. Espera al menos lo indicado en Retry-After, reduce la frecuencia y conserva la referencia para reintentos de add.
Retry-After: 60
{
"error": "Rate limit exceeded"
}API desactivada, proveedor no disponible o fallo temporal. Detén los reintentos masivos y espera; si el resultado de add es incierto, usa solo la referencia y datos originales.
{
"error": "API order creation is disabled"
}Los JSON son ejemplos de errores reales; el mensaje error puede variar según la causa. Maneja el estado HTTP y la condición correspondiente.
Códigos de estado HTTP
Los errores son objetos JSON con el campo error y no exponen datos internos.
| HTTP | Descripción |
|---|---|
| 200 | Correcto (puede haber errores individuales en lotes) |
| 400 | Acción o parámetros de consulta no válidos |
| 401 | Clave API o permiso no válido |
| 403 | Se requiere HTTPS |
| 404 | Servicio o pedido inexistente o de otra cuenta |
| 405 | Método HTTP no admitido |
| 409 | Conflicto de idempotencia o límite max_charge superado |
| 413 | Cuerpo de solicitud demasiado grande |
| 415 | Content-Type no admitido |
| 422 | Parámetros, precios o condiciones de compra no válidos |
| 429 | Límite de solicitudes superado; consulta Retry-After |
| 503 | API desactivada, sin instalar o temporalmente no disponible |
Seguridad, límites y errores
Opcional: hasta 20 IPv4/IPv6 exactas, una por línea. Vacío permite cualquier IP. Sin CIDR. Lista inválida se rechaza y conserva la anterior.
Por minuto: 60 peticiones/IP antes de autenticar; además 120 lecturas o 15 add por usuario/key. Cuerpo máximo 64 KiB. 429 incluye Retry-After. No se confía en Forwarded/X-Forwarded-For del cliente.
FAQ: Obtén la key al entrar. Si la pierdes debes rotarla; no puede volver a mostrarse. Keys de proveedor no funcionan aquí. V1 (2026-10-30): services, balance, add Default y status individual/lotes. Posventa queda para V2 con flujos seguros.