Catálogo público
GET /api/v1/catalog devuelve el catálogo seleccionado de servicios y países. Son datos descriptivos, no una fuente de disponibilidad del proveedor en tiempo real. GET /openapi.json describe los endpoints HTTP actuales. Las credenciales de los proveedores nunca se envían al navegador.
Cotizaciones vinculadas al usuario
POST /api/v1/quotes acepta servicio y país desde una sesión autenticada del mismo origen. Las cotizaciones pertenecen a ese usuario y caducan a los 60 segundos. Su importe en USD se calcula en el servidor usando conversión verificada de la moneda de origen, recargo y precio mínimo de venta.
Pedidos idempotentes
POST /api/v1/orders acepta quoteId e Idempotency-Key. Un nuevo intento con la misma clave devuelve el mismo pedido en vez de comprar otro número. La reserva del monedero se registra de forma atómica. Una respuesta ambigua del proveedor mantiene el pedido en revisión; no provoca una segunda compra automática.
Estado y finalización
GET /api/v1/orders/{id} consulta un pedido propio y su estado de SMS. Un POST al mismo endpoint con la acción finish o cancel solicita una transición de estado. El servidor aplica el bloqueo inicial de cancelación de 120 segundos y registra el reembolso una sola vez, después de que el proveedor confirme la cancelación.
Confirmación de pago
Stripe Checkout acredita el monedero real o de prueba correspondiente solo después de un webhook verificado y una consulta autenticada del pago. Las claves reales y de prueba suministradas pertenecen a cuentas Stripe distintas, por lo que sus claves, secretos de endpoint e ingresos se mantienen separados. NOWPayments usa IPN verificada, vinculación de factura y consulta del pago liquidado con una tolerancia de ±0,50 % en el importe. Un redireccionamiento exitoso del navegador nunca es prueba de pago.
Acceso y disponibilidad
El sitio principal y el catálogo son públicos. El monedero, las cotizaciones y los pedidos requieren autenticación y comprobaciones de propiedad. Las acciones reales dependen de credenciales configuradas, acceso a proveedores y confirmaciones verificadas; los ejemplos de API no afirman que una compra pagada o todo el ciclo de pago ya se hayan validado.
GET /api/v1/catalog
GET /api/v1/offers?service=whatsapp&country=usa
POST /api/v1/quotes
Content-Type: application/json
{"service":"whatsapp","country":"usa"}
POST /api/v1/orders
Idempotency-Key: <unique-request-key>
{"quoteId":"<owned-unexpired-quote-id>"}
GET /api/v1/orders/<order-id>
POST /api/v1/orders/<order-id>
{"action":"cancel"}Volver al panel