Documentación API REST CuñaPay
API completa para gestionar transacciones de USDT en la red TRON, compras de USDT con Bolivianos (BS), staking centralizado, y noticias económicas.
Introducción
La API de CuñaPay es una plataforma RESTful desarrollada en ASP.NET Core que permite gestionar transacciones de USDT en la red TRON, compras de USDT con Bolivianos (BS), staking centralizado, y noticias económicas.
Características Principales
- Autenticación JWT: Sistema de autenticación basado en tokens JWT
- Gestión de Wallets: Creación y gestión de wallets TRON para usuarios
- Compras USDT/BS: Sistema de compra de USDT con Bolivianos usando precios de Binance P2P
- Staking Centralizado: Sistema de staking donde los fondos se transfieren a la wallet del admin
- Gestión de Noticias: Sistema de noticias económicas con categorías
- Roles: Sistema de roles (User y Admin) con permisos diferenciados
Formato de Respuesta: Todas las respuestas exitosas devuelven JSON.
Los errores también se devuelven en formato JSON con un campo error
o ok: false.
Autenticación
La mayoría de los endpoints requieren autenticación mediante JWT. El token debe enviarse
en el header Authorization con el formato:
Authorization: Bearer <token>
/auth/register
Registra un nuevo usuario y crea automáticamente su wallet TRON.
{
"email": "usuario@example.com",
"password": "password123",
"firstName": "Juan",
"lastName": "Pérez"
}
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": "507f1f77bcf86cd799439011",
"email": "usuario@example.com",
"firstName": "Juan",
"lastName": "Pérez",
"role": "User"
},
"wallet": {
"id": "507f1f77bcf86cd799439012",
"address": "TXYZopYRdj2D9XRtbG411XZZ3kM5VkAeBf"
}
}
/auth/login
Autentica un usuario y devuelve un token JWT.
{
"email": "usuario@example.com",
"password": "password123"
}
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": "507f1f77bcf86cd799439011",
"email": "usuario@example.com",
"firstName": "Juan",
"lastName": "Pérez",
"role": "User"
}
}
Errores: 401 Unauthorized (credenciales inválidas), 400 Bad Request (email o password faltantes)
Endpoints de Usuarios
Todos los endpoints de usuarios requieren autenticación (header Authorization: Bearer <token>).
/api/me
Obtiene la información del usuario autenticado.
{
"id": "507f1f77bcf86cd799439011",
"email": "usuario@example.com",
"firstName": "Juan",
"lastName": "Pérez"
}
/api/me/wallet
Obtiene la información de la wallet TRON del usuario.
{
"id": "507f1f77bcf86cd799439012",
"address": "TXYZopYRdj2D9XRtbG411XZZ3kM5VkAeBf",
"userId": "507f1f77bcf86cd799439011"
}
/api/me/balance
Obtiene el balance completo del usuario (TRX, USDT, locked en staking, disponible).
{
"trx": 100.5,
"usdt": 500.25,
"lockedInStaking": 100.0,
"available": 400.25
}
/api/me/send
Envía USDT desde la wallet del usuario a otra dirección TRON.
{
"to": "TABC123def456ghi789jkl012mno345pqr678stu901vwx234yz",
"amount": "100.5"
}
Idempotency-Key: Clave única para evitar duplicados (opcional)
{
"ok": true,
"txid": "abc123def456...",
"status": "SUCCESS"
}
Errores: 400 Bad Request, 429 Too Many Requests (rate limiting: 3 requests por 30 segundos), 404 Not Found
/api/me/stakes
Crea un nuevo stake. El USDT se transfiere automáticamente a la wallet del admin.
{
"amountUsdt": 100.0
}
Nota: El dailyRateBp (tasa diaria en basis points) viene configurado en el backend. El USDT se transfiere inmediatamente a la wallet del admin.
/api/purchases
Crea una nueva solicitud de compra de USDT con BS. El estado inicial es "waiting_payment".
{
"amountUsdt": 100.0
}
/api/p2p/usdt/buy/avg
Obtiene el precio promedio de compra de USDT en Binance P2P. Este endpoint es público y no requiere autenticación.
{
"ok": true,
"promedio_precio": "36.50",
"precio": 36.5,
"asset": "USDT",
"fiat": "BOB",
"rows": 10
}
Códigos de Estado HTTP
| Código | Significado | Descripción |
|---|---|---|
| 200 | OK | Solicitud exitosa |
| 201 | Created | Recurso creado exitosamente |
| 400 | Bad Request | Solicitud inválida (datos faltantes o incorrectos) |
| 401 | Unauthorized | No autenticado o token inválido |
| 403 | Forbidden | No tiene permisos (rol incorrecto) |
| 404 | Not Found | Recurso no encontrado |
| 429 | Too Many Requests | Límite de rate limiting alcanzado |
| 500 | Internal Server Error | Error interno del servidor |
Manejo de Errores
Todas las respuestas de error siguen este formato:
{
"ok": false,
"error": "Mensaje de error descriptivo"
}
401 Unauthorized
{
"error": "User ID not found in token"
}
Solución: Verifica que el token JWT sea válido y esté en el header Authorization.
403 Forbidden
{
"error": "Access denied. Admin role required."
}
Solución: El usuario no tiene el rol Admin requerido.
429 Too Many Requests
{
"error": "Too many requests. Try again later."
}
Solución: Espera unos segundos antes de intentar nuevamente. El límite es de 3 requests por 30 segundos para el endpoint de envío.
Notas Importantes
Autenticación
Los tokens JWT expiran según la configuración en appsettings.json (por defecto 12 horas).
El token debe incluirse en todas las solicitudes autenticadas: Authorization: Bearer <token>
Staking
El sistema de staking es centralizado: los fondos se transfieren a la wallet del admin. El usuario puede cerrar su stake en cualquier momento y recibirá el principal + recompensas acumuladas. Las recompensas se calculan en tiempo real basándose en la tasa diaria configurada.
Compras USDT/BS
El precio se calcula como: Precio de Compra de Binance (BOB) + 0.13 BS. El estado inicial de una compra es "waiting_payment". El admin debe aprobar la compra para que se transfiera el USDT al usuario.
Wallets
Cada usuario tiene una wallet TRON única creada automáticamente al registrarse. El admin tiene una wallet de custodia (custody wallet) que se usa para aprobar compras y gestionar staking. Las direcciones TRON tienen el formato: T seguido de 33 caracteres alfanuméricos.
Rate Limiting
El endpoint de envío (POST /api/me/send) tiene rate limiting: 3 requests por 30 segundos por usuario/IP.
Idempotencia
El endpoint de envío soporta idempotencia mediante el header Idempotency-Key.
Si se envía la misma clave, se devuelve la respuesta cacheada en lugar de ejecutar la transacción nuevamente.
Colecciones de Postman
Para facilitar las pruebas, se incluyen dos colecciones de Postman:
- CuñaPay_API_Usuarios.postman_collection.json: Endpoints para usuarios normales
- CuñaPay_API_Admin.postman_collection.json: Endpoints para administradores
Variables de Entorno en Postman
Configura las siguientes variables en Postman:
base_url: http://localhost:5000token: Se guarda automáticamente después del loginadmin_token: Se guarda automáticamente después del login de admin