← Volver a docs

GET /v1/fx/rates

Devuelve un snapshot con todas las tasas disponibles de bolívar venezolano frente a la moneda base.

Es el endpoint principal y el más usado. Una sola llamada te da todo lo que necesitas.


Request

GET /v1/fx/rates HTTP/1.1
Host: api.cotizave.com
X-API-Key: ctz_live_aB3cD8fG2hJ5kL9mN1pQ4rS7tU0vWxYzA6bC3d
Accept: application/json

Parámetros de query

Este endpoint no acepta parámetros de query. Devuelve siempre el snapshot completo con USD como moneda base.

Ejemplo de request

curl https://api.cotizave.com/v1/fx/rates \
  -H "X-API-Key: $COTIZAVE_API_KEY"
const res = await fetch('https://api.cotizave.com/v1/fx/rates', {
  headers: { 'X-API-Key': process.env.COTIZAVE_API_KEY }
})
const data = await res.json()
import os, requests

r = requests.get(
    'https://api.cotizave.com/v1/fx/rates',
    headers={'X-API-Key': os.environ['COTIZAVE_API_KEY']}
)
data = r.json()

Response

200 OK

{
  "country": "VE",
  "currency": "VES",
  "base": "USD",
  "rates": [
    {
      "market": "reference",
      "type": "reference",
      "mid": 475.0083,
      "updated_at": "2026-04-08T14:00:00Z"
    },
    {
      "market": "parallel",
      "type": "parallel",
      "ask": 640.12,
      "bid": 637.63,
      "mid": 638.87,
      "updated_at": "2026-04-08T17:25:00Z"
    },
    {
      "market": "binance",
      "type": "p2p",
      "ask": 639.24,
      "bid": 636.50,
      "mid": 637.87,
      "updated_at": "2026-04-08T17:29:00Z"
    },
    {
      "market": "bybit",
      "type": "p2p",
      "ask": 639.88,
      "bid": 637.12,
      "mid": 638.50,
      "updated_at": "2026-04-08T17:29:00Z"
    },
    {
      "market": "okx",
      "type": "p2p",
      "ask": 635.80,
      "bid": 632.70,
      "mid": 634.25,
      "updated_at": "2026-04-08T17:29:00Z"
    },
    {
      "market": "bitget",
      "type": "p2p",
      "ask": 636.10,
      "bid": 632.86,
      "mid": 634.48,
      "updated_at": "2026-04-08T17:29:00Z"
    },
    {
      "market": "mexc",
      "type": "p2p",
      "ask": 650.50,
      "bid": 647.54,
      "mid": 649.02,
      "updated_at": "2026-04-08T17:28:00Z"
    }
  ],
  "index": {
    "value": 521.3842,
    "version": "v1",
    "as_of": "2026-04-08T17:29:15Z",
    "weights": { "bcv": 0.30, "paralelo": 0.20, "p2p": 0.50 },
    "components": { "bcv": 475.0083, "paralelo": 638.87, "p2p": 637.87 },
    "p2p_median": 637.87,
    "p2p_count": 5,
    "flags": {}
  },
  "fetched_at": "2026-04-08T17:29:15Z"
}

Schema de respuesta

CampoTipoDescripción
countrystringSiempre "VE" (ISO 3166-1 alpha-2 de Venezuela)
currencystringSiempre "VES" (ISO 4217 del bolívar soberano)
basestringMoneda base usada en las tasas (USD o EUR)
ratesarrayLista de cotizaciones
rates[].marketstringIdentificador del mercado (ver tabla abajo)
rates[].typestringTipo de tasa: reference, parallel o p2p
rates[].asknumber | nullPrecio de venta. Presente solo en parallel y p2p.
rates[].bidnumber | nullPrecio de compra. Presente solo en parallel y p2p.
rates[].midnumberPrecio promedio. Siempre presente.
rates[].updated_atstring (ISO 8601)Cuándo se actualizó esta cotización específica
indexobjectCotizave Index calculado al momento del snapshot. Mismo shape que GET /v1/fx/index. Siempre presente.
index.valuenumberVES por 1 USD — el índice ponderado (BCV 30 % + paralela 20 % + P2P 50 %).
fetched_atstring (ISO 8601)Cuándo Cotizave ensambló esta respuesta

Markets disponibles

MarketTipoFuenteFrecuencia
referencereferenceBCVCuando BCV publica (típicamente 1/día)
parallelparallelMonitor Dólar~25 minutos
binancep2pBinance P2P USDT/VES~25 minutos
bybitp2pBybit P2P USDT/VES~25 minutos
okxp2pOKX P2P USDT/VES~25 minutos
bitgetp2pBitget P2P USDT/VES~25 minutos
mexcp2pMEXC P2P USDT/VES~25 minutos

Tasas reference vs parallel vs p2p

reference (BCV): la tasa oficial publicada por BCV. Úsala para:

  • Documentos oficiales y presupuestos
  • Reportes contables y financieros
  • Contratos y acuerdos comerciales
  • Análisis de auditoría

parallel (paralela): el promedio de mercado del paralelo. Úsala para:

  • Mostrar "la tasa real" en apps consumer
  • Remesas informales
  • Conversiones rápidas en la vida diaria
  • Comparación contra la oficial

p2p (exchanges): cotizaciones reales de USDT/VES en cada exchange. Úsalas para:

  • Apps de trading o wallet crypto
  • Comparación de precios entre exchanges
  • Análisis de spreads
  • Estrategias de arbitraje

Casos de uso típicos

Mostrar el tipo de cambio en tu app

Trae el snapshot completo, localiza la tasa BCV y muéstrasela al usuario:

const data = await fetch('https://api.cotizave.com/v1/fx/rates', {
  headers: { 'X-API-Key': process.env.COTIZAVE_API_KEY }
}).then(r => r.json())

const bcv = data.rates.find(r => r.market === 'reference')
console.log(`Tasa BCV: ${bcv.mid} Bs/USD`)

Widget de conversión multi-mercado

Deja que el usuario elija el mercado y muestra todas las tasas side-by-side con una sola llamada:

const data = await fetch('https://api.cotizave.com/v1/fx/rates', {
  headers: { 'X-API-Key': process.env.COTIZAVE_API_KEY }
}).then(r => r.json())

// Renderiza cada market con su mid
data.rates.forEach(r => {
  console.log(`${r.market}: ${r.mid} Bs/USD`)
})

Monitoreo de spreads entre mercados

Consulta periódicamente y compara bid/ask entre mercados P2P para detectar oportunidades:

const data = await fetch('https://api.cotizave.com/v1/fx/rates', {
  headers: { 'X-API-Key': process.env.COTIZAVE_API_KEY }
}).then(r => r.json())

const p2p = data.rates.filter(r => r.type === 'p2p')
p2p.forEach(r => {
  const spread = r.ask - r.bid
  console.log(`${r.market} — bid: ${r.bid}, ask: ${r.ask}, spread: ${spread.toFixed(2)}`)
})

Errores posibles

Códigoerror.codeCausa
401invalid_api_keyAPI Key inválida, faltante o revocada
429rate_limit_exceededCuota mensual agotada
500internal_errorError inesperado del lado de Cotizave
503service_unavailableServicio temporalmente no disponible

Notas importantes

Fuentes temporalmente caídas

En casos excepcionales, una fuente upstream puede estar temporalmente caída. En ese caso:

  • El campo updated_at refleja la edad real del dato (puede ser más viejo de lo habitual)
  • Si una fuente está caída por más de 10 minutos, la excluimos de la respuesta en lugar de devolver datos peligrosamente desactualizados

Recomendación: siempre revisa updated_at antes de confiar en un dato para operaciones críticas.

Orden de los rates

El orden del array rates no está garantizado. No dependas de que reference siempre esté primero. Usa el campo market para identificar cada cotización:

const bcv = data.rates.find(r => r.market === 'reference')
const paralela = data.rates.find(r => r.market === 'parallel')

Precisión numérica

Los valores son números JSON estándar (double-precision floating point). Para operaciones financieras críticas, considera:

  • Redondear a 2-4 decimales antes de mostrar al usuario
  • Usar bibliotecas de aritmética decimal (decimal.js, BigDecimal en Java, Decimal en Python) si haces cálculos complejos
  • No comparar montos exactos con === (usar tolerancia)