QvaPay API
Store

Paquetes de Teléfono

Listar y comprar paquetes de datos y minutos para teléfonos cubanos.

GET /store/phone_package

Retorna la lista de paquetes de teléfono activos disponibles para compra (datos, minutos, etc.).

Autenticación

No requiere autenticación (endpoint público).

Request

curl -X GET https://api.qvapay.com/store/phone_package

Response

{
  "phone_packages": [
    {
      "id": 1,
      "name": "Paquete 1GB + 20 min",
      "logo": "https://example.com/package.png",
      "details": [
        { "label": "Datos", "value": "1 GB" },
        { "label": "Minutos", "value": "20" }
      ],
      "price": 5.00,
      "gold_price": 4.50,
      "external": true,
      "external_amount": 100,
      "period": "30 días"
    }
  ]
}

Campos de respuesta

CampoTipoDescripción
idnumberIdentificador del paquete
namestringNombre del paquete
logostringURL del logo del paquete
detailsarrayDetalles del paquete (datos, minutos, SMS, etc.)
pricenumberPrecio regular en USD
gold_pricenumberPrecio para usuarios GOLD en USD
externalbooleanIndica si es un paquete externo
external_amountnumberMonto externo asociado
periodstringPeríodo de validez del paquete

Rate Limiting

10 requests por minuto por IP.

Errores

CódigoDescripción
429Demasiadas solicitudes
500Error al obtener los paquetes

POST /store/phone_package

Compra un paquete de teléfono para un número cubano. El monto se descuenta del balance del usuario.

Autenticación

Bearer Token (header Authorization: Bearer <token>).

Request

curl -X POST https://api.qvapay.com/store/phone_package \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "phone_package_id": 1,
    "phone_number": "+5350001234",
    "recipient_name": "María Pérez González"
  }'

Parámetros (body)

ParámetroTipoRequeridoDescripción
phone_package_idnumberID del paquete de teléfono a comprar
phone_numberstringNúmero de teléfono cubano del destinatario
recipient_namestringCondicionalNombre y apellidos de quien recibe la recarga. Obligatorio si el comprador es US person (ficha CIP); opcional para el resto. Mínimo nombre y un apellido, solo letras

Response

{
  "message": "Paquete de teléfono comprado correctamente",
  "transaction_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "buyedService": "123"
}

Recuperar el detalle de la compra

El paquete queda en pending hasta que se procesa la entrega. Para consultar su estado y los datos de entrega, usa GET /store/my/{buyedService} con el buyedService devuelto aquí. Ver Mis Compras.

Comisión

El precio varía según el tipo de usuario:

  • Usuarios regulares: se cobra el campo price del paquete.
  • Usuarios GOLD: se cobra el campo gold_price (precio reducido).

Rate Limiting

1 request cada 10 segundos por usuario.

Errores

CódigoDescripción
400Faltan phone_package_id o phone_number
400Falta o es inválido recipient_name cuando el comprador es US person (code: "RECIPIENT_NAME_REQUIRED")
400El número de teléfono no es válido
400Saldo insuficiente
401No autorizado
404El paquete no existe o no está activo
429Demasiadas solicitudes
500Error al crear la transacción