Saltar navegación
SMM Velox

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 · HTTPS

Enví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/v2
Ejemplo cURL
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'

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.

POST

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.

Solicitud (cuerpo)
key=YOUR_API_KEY&action=services
Respuesta JSON
[
  {
    "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"
  }
]
POST

Consultar saldo

La API cotiza y cobra siempre en VND. El USD de la interfaz es solo informativo.

Solicitud (cuerpo)
key=YOUR_API_KEY&action=balance
Respuesta JSON
{
  "balance": "100000.000000000001",
  "currency": "VND"
}
POST

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ámetroRequisitoDescripción
keyObligatorioClave API de la cuenta
actionObligatorioAcción add
serviceObligatorioID de servicio del catálogo API
linkObligatorioEnlace http/https al contenido
quantityObligatorioCantidad entera dentro de min/max
client_order_idOpcionalReferencia única por cuenta para evitar pedidos duplicados
idempotency_keyOpcionalAlias de client_order_id; envía solo uno de los dos campos, nunca ambos
max_chargeOpcionalCargo máximo aceptado (cadena VND), no es un precio elegido por el cliente
Solicitud (cuerpo)
key=YOUR_API_KEY&action=add&service=123&link=https://example.com/post&quantity=1000&client_order_id=YOUR_UNIQUE_ORDER_ID
Respuesta JSON
{
  "order": "456"
}
POST

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.

Solicitud (cuerpo)
key=YOUR_API_KEY&action=status&order=456
Respuesta JSON
{
  "charge": "11550",
  "status": "Pending",
  "start_count": null,
  "remains": null,
  "currency": "VND",
  "review_required": false
}
POST

Estado de varios pedidos

La respuesta es un objeto indexado por ID; los ID desconocidos tienen errores individuales. Máximo 100 ID.

Solicitud (cuerpo)
key=YOUR_API_KEY&action=status&orders=456,999
Respuesta JSON
{
  "456": {
    "charge": "11550",
    "status": "Pending",
    "start_count": null,
    "remains": null,
    "currency": "VND",
    "review_required": false
  },
  "999": {
    "error": "Incorrect order ID"
  }
}
400

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.

Solicitud (cuerpo)
key=YOUR_API_KEY&action=cancel
Respuesta JSON
{
  "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

Idempotencia

La 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.

  1. 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.
  2. Si recibes un order ID, guárdalo y consulta action=status con order. No envíes otro add solo para consultar el estado.
  3. 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.
  4. 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.

Primer add o reintento con la MISMA referencia y parámetros
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

HTTP 409

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.

Respuesta JSON
{
  "error": "Client order ID conflicts with an existing request"
}
HTTP 422

Parámetros o condiciones de compra no válidos. Revisa fields y corrige la causa antes de una solicitud nueva; no reintentes a ciegas.

Respuesta JSON
{
  "error": "Invalid request parameters",
  "fields": [
    "quantity"
  ]
}
HTTP 429

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

Respuesta JSON
{
  "error": "Rate limit exceeded"
}
HTTP 503

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.

Respuesta JSON
{
  "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.

HTTPDescripción
200Correcto (puede haber errores individuales en lotes)
400Acción o parámetros de consulta no válidos
401Clave API o permiso no válido
403Se requiere HTTPS
404Servicio o pedido inexistente o de otra cuenta
405Método HTTP no admitido
409Conflicto de idempotencia o límite max_charge superado
413Cuerpo de solicitud demasiado grande
415Content-Type no admitido
422Parámetros, precios o condiciones de compra no válidos
429Límite de solicitudes superado; consulta Retry-After
503API 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.