Listar Coins
Obtener todas las categorías de monedas con sus coins asociados, incluyendo comisiones, límites y datos de retiro.
GET /coins
Retorna todas las categorías de monedas (Criptomonedas, Bank, Cash, E-Wallet, Gift Card, Móvil) junto con los coins que pertenecen a cada una. Cada coin incluye su configuración completa: comisiones de entrada y salida, límites, campos requeridos para retiros y estado de disponibilidad.
Autenticación
No requiere autenticación (endpoint público).
Request
curl -X GET https://api.qvapay.com/coinsResponse
[
{
"id": 1,
"name": "Criptomonedas",
"logo": "crypto",
"Coins": [
{
"id": "6",
"coins_categories_id": 1,
"network": "TRON",
"name": "USDT (TRC20)",
"logo": "usdt",
"tick": "USDT",
"fee_in": "0.2",
"fee_in_gold": "0",
"fee_out": "1",
"fee_out_gold": "0.8",
"fee_out_fixed": [100, 1],
"min_in": "1",
"min_out": "2",
"max_in": 1000000,
"max_out": 5000,
"working_data": [
{
"name": "Wallet",
"type": "text"
}
],
"enabled_in": true,
"enabled_out": true,
"enabled_p2p": true,
"auto_withdraw": true,
"p2p_rate_discount": "0",
"trade": false,
"price": "1",
"decimals": 2,
"stable": true,
"created_at": null,
"updated_at": "2025-06-12T03:40:01.000Z",
"description": "### ¿Qué es USDT (TRC20)? ...",
"seo_title": "USDT TRC20 ✓ Compra y envía en QvaPay",
"seo_description": "USDT TRC20 en QvaPay: stablecoin rápido y seguro..."
}
]
}
]Campos de la categoría
| Campo | Tipo | Descripción |
|---|---|---|
id | number | ID de la categoría |
name | string | Nombre de la categoría (Criptomonedas, Bank, Cash, E-Wallet, Gift Card, Móvil) |
logo | string | Identificador del logo de la categoría |
Coins | array | Coins pertenecientes a la categoría |
Campos del coin
| Campo | Tipo | Descripción |
|---|---|---|
id | string | ID del coin (BigInt serializado como string) |
coins_categories_id | number | ID de la categoría a la que pertenece |
network | string | null | Red blockchain del activo (BTC, TRON, BSC, SOL, TON, etc.). null para métodos sin red o red implícita |
name | string | Nombre para mostrar (ej: USDT (TRC20)) |
logo | string | Identificador del logo |
tick | string | Ticker único del coin (ej: USDT, BTCLN, BANK, BANK_INTL, BANK_EUR) |
fee_in | string | Comisión de depósito en porcentaje (%) |
fee_in_gold | string | Comisión de depósito (%) para usuarios GOLD |
fee_out | string | Comisión de retiro en porcentaje (%) |
fee_out_gold | string | Comisión de retiro (%) para usuarios GOLD |
fee_out_fixed | array | null | Fee fijo de retiro para montos pequeños: [umbral, fee_fijo]. Ver Cómo funciona fee_out_fixed |
min_in | string | Monto mínimo de depósito en USD |
min_out | string | Monto mínimo de retiro en USD |
max_in | number | Monto máximo de depósito en USD |
max_out | number | Monto máximo de retiro en USD |
working_data | array | Campos que el usuario debe completar al solicitar un retiro. Ver Campos de working_data |
enabled_in | boolean | Depósitos habilitados |
enabled_out | boolean | Retiros habilitados |
enabled_p2p | boolean | Disponible en el mercado P2P |
auto_withdraw | boolean | Los retiros se procesan automáticamente (sin revisión manual) |
p2p_rate_discount | string | Ajuste de tasa aplicado en el mercado P2P |
trade | boolean | Disponible en el módulo de trading |
price | string | Precio actual del activo en USD |
decimals | number | Decimales usados para representar montos del activo |
stable | boolean | true si es una stablecoin o método con paridad 1:1 con USD |
created_at | string | null | Fecha de creación |
updated_at | string | null | Última actualización (los precios se refrescan periódicamente) |
description | string | Descripción del activo en formato Markdown |
seo_title | string | Título SEO de la página pública del coin |
seo_description | string | Descripción SEO de la página pública del coin |
cash_zones | object | (Solo monedas de efectivo con tarifario por municipio, p. ej. USDCASH) Tarifas de entrega por provincia y municipio. Ver Tarifario de efectivo por municipio. En el resto de coins el campo no aparece |
Cómo funciona fee_out_fixed
fee_out_fixed define un fee fijo para retiros de montos pequeños, en lugar del porcentaje fee_out. Es un arreglo de dos valores:
fee_out_fixed: [umbral, fee_fijo]umbral(primer valor): límite en USD que separa los dos modos de comisión.fee_fijo(segundo valor): comisión fija en USD que se cobra cuando el monto del retiro es menor o igual al umbral.
La regla de cálculo es:
| Monto del retiro | Comisión aplicada |
|---|---|
monto <= umbral | Fee fijo: fee_fijo USD (no se aplica porcentaje) |
monto > umbral | Porcentaje: monto × fee_out / 100 (o fee_out_gold para usuarios GOLD) |
Cuando fee_out_fixed es null, siempre se aplica el porcentaje fee_out sin importar el monto.
Ejemplo
USDT (TRC20) tiene fee_out: "1" y fee_out_fixed: [100, 1]:
- Retiro de $50 → como
50 <= 100, se cobra el fee fijo de $1. El usuario recibe $49. - Retiro de $100 → como
100 <= 100, se cobra el fee fijo de $1. El usuario recibe $99. - Retiro de $500 → como
500 > 100, se cobra el 1%: $5. El usuario recibe $495.
Este esquema evita que los retiros pequeños paguen comisiones porcentuales insignificantes que no cubren el costo de red, garantizando un fee mínimo rentable, mientras que los retiros grandes pagan el porcentaje normal.
Nota: para usuarios GOLD el porcentaje usado por encima del umbral es
fee_out_gold, pero el fee fijo por debajo del umbral es el mismo para todos los usuarios.
Campos de working_data
working_data describe el formulario que el usuario debe completar al retirar en ese coin (ej: dirección de wallet, datos bancarios, número de celular). Cada elemento tiene:
| Campo | Tipo | Descripción |
|---|---|---|
name | string | Nombre del campo (ej: Wallet, Nro de cuenta o tarjeta) |
type | string | Tipo de campo: text, select, phone, email o number |
label | string | (Opcional) Etiqueta para mostrar en el formulario. La web la muestra en lugar de name; la clave de details sigue siendo name |
placeholder | string | (Opcional) Texto de ayuda del campo |
required | boolean | (Opcional) Si el campo es obligatorio |
options | array | (Solo type: select) Opciones disponibles |
Las opciones de un campo select pueden incluir metadatos adicionales:
| Campo | Tipo | Descripción |
|---|---|---|
value | string | Valor de la opción (ej: La Habana) |
eta_hours | string | Tiempo estimado de entrega en horas (ej: 1-72) |
fee_pct | number | Recargo porcentual extra sobre el monto del retiro al elegir esta opción |
Efectivo por zonas: si una moneda de efectivo tiene tarifario por municipio (
cash_zonesen el propio coin, oGET /withdraw/cash-zones?coin=…), elfee_pctde la provincia se ignora y el recargo sale de la zona elegida. Ver Listar y Crear Retiros.
Tarifario de efectivo por municipio (cash_zones)
Las monedas de efectivo que se entregan por municipio (hoy USDCASH) llevan el tarifario completo dentro del coin, con el mismo contenido que GET /withdraw/cash-zones. El campo aparece igual en GET /coins, GET /coins/v2 y GET /coins/:id.
"cash_zones": {
"margin_pct": 1,
"zones": [
{
"id": "1",
"coin_tick": "USDCASH",
"province_code": "ART",
"province_name": "Artemisa",
"municipality": "Artemisa",
"is_capital": true,
"provider_pct": 3,
"margin_pct": null,
"total_pct": 4,
"min_usd": 50,
"small_flat_usd": 4,
"eta_min_hours": 24,
"eta_max_hours": 48,
"home_delivery": true,
"route": "p2p",
"enabled": true
}
]
}| Campo | Descripción |
|---|---|
margin_pct | Margen de servicio global en %, usado por las zonas que no tienen uno propio |
zones[].province_code / province_name | Provincia; en el retiro va en el primer campo select del working_data |
zones[].municipality | Municipio, tal como debe enviarse en el campo Municipio del retiro |
zones[].provider_pct | Tarifa de entrega en % del monto |
zones[].margin_pct | Margen de servicio de la zona en %; null = usa el margin_pct global |
zones[].total_pct | Recargo total en % (provider_pct + margen efectivo). Es lo que se cobra cuando la tarifa fija no es mayor |
zones[].small_flat_usd | Tarifa de entrega fija en USD cuando es mayor que el % (montos pequeños); null = no aplica |
zones[].min_usd | Mínimo a entregar (monto neto a recibir) en ese municipio |
zones[].eta_min_hours / eta_max_hours | Plazo estimado de entrega |
zones[].home_delivery | false = sin entrega a domicilio (el beneficiario recoge el efectivo) |
Cargo de la zona sobre el amount del retiro, que se suma al fee_out del coin: max(amount × provider_pct / 100, small_flat_usd) + amount × margen / 100. Por ejemplo, retirar $200 en Artemisa cuesta max(6, 4) + 2 = $8 de cargo de zona, más el fee_out del coin.
Si la moneda deja de entregarse por zonas, cash_zones desaparece y el retiro vuelve al fee_pct del select de provincia. Las tarifas pueden tardar hasta unos 15 minutos en reflejar un cambio (caché).
Notas
- La respuesta es un array JSON de categorías, cada una con sus coins en la propiedad
Coins. - Los IDs de tipo
BigIntse serializan como strings en la respuesta. - Los precios (
price) de activos no estables se actualizan periódicamente mediante un cron; el campoupdated_atrefleja la última actualización. - Las comisiones
fee_in,fee_in_gold,fee_outyfee_out_goldson siempre porcentajes, no montos fijos.