Webhooks de tasas de cambio

Webhooks del BCV, paralelo y Binance P2P.

Recibe las tasas de cambio de Venezuela en tu servidor: BCV dólar y euro, dólar paralelo y Binance P2P. Cotizave envía las actualizaciones por POST con un JSON firmado, sin consultas periódicas a la API.

4 tasas de VenezuelaDesde el plan Growthguía de integración →
POST tu-servidor.com/webhooks200 OK · 182 ms
cotizave-event: rates.updated cotizave-webhook-id: 3f1c9a2e-7b4d-4e8a-9c21-5d6f0a8b7e43 cotizave-delivery-type: change webhook-id: 01a13be9-36eb-785a-b3a0-d2586a06e9ab webhook-timestamp: 1792006502 webhook-signature: v1,K5oZfzN95Z9UVu1EsfQm… { "id": "01a13be9-36eb-785a-b3a0-d2586a06e9ab", "type": "rates.updated", "timestamp": "2026-10-14T19:35:02.123456Z", "delivery_type": "change", "data": { "changed": ["binance"], "rates": [ { "market": "reference", "mid": 880.16, … }, { "market": "binance", "mid": 1002.5, "change_pct": 0.12, "previous_mid": 1001.3, … } ] } }
4tasas: BCV dólar y euro, paralelo y Binance P2P
15 minBinance P2P en Pro; 30 min en Growth
HMACSHA-256 en cada aviso, con rotación del secreto
Hasta 4intentos por aviso ante fallos temporales

Por qué

Recibe cambios de tasa sin consultas repetidas.

Un webhook es una notificación automática de la API a tu servidor. Si consultas el BCV cada 5 minutos, casi siempre recibes el mismo valor. Con Cotizave, recibes un aviso cuando detectamos un cambio, con el intervalo de Binance que permite tu plan.

Consultar cada 5 min

288 consultas al día

Casi todas devuelven el mismo valor, gastan cuota y necesitas un cron que no se caiga.

Webhook

POST cuando hay novedades

Recibes la tasa en tu servidor sin gastar cuota de consultas. Binance envía el valor más reciente según el intervalo del plan; los avisos tienen un cupo mensual propio.

Casos de uso

Qué puedes automatizar con las tasas de Venezuela.

Tu aplicación recibe el dato en JSON y decide qué hacer con él: actualizar una caché, mostrar un precio o enviar una alerta a tu equipo.

Precios en bolívares

Actualiza la tasa que usa tu tienda o catálogo para mostrar precios en VES. Los avisos del BCV incluyen effective_date para identificar desde qué fecha aplica el valor.

Conocer la API de la tasa BCV

Alertas de variación

Recibe el dólar paralelo y filtra movimientos en tu servidor. El aviso incluye la variación contra el valor anterior del mercado cuando existe, y la brecha frente al BCV si está disponible.

Entender la brecha BCV y paralelo

Paneles de Binance P2P

Mantén una referencia de Binance P2P en tu panel con avisos cada 15, 30 o 60 minutos según el plan, siempre que cambie el valor. Los demás exchanges se consultan por la API.

Consultar tasas P2P por API

Cómo funciona

Cómo configurar tu webhook en tres pasos.

Registra tu URL y elige las tasas desde el panel de Cotizave. La verificación y el procesamiento del aviso se hacen en tu servidor.

1

Registra tu URL

Una URL HTTPS pública de tu servidor. Al crear el webhook te mostramos el secreto de firma; lo puedes volver a ver desde el panel si iniciaste sesión hace menos de 1 hora.

2

Elige tus tasas

Marca las que sigues: BCV dólar y euro, paralelo o Binance P2P. La frecuencia de Binance depende del plan. Si existe un valor anterior, change_pct te permite filtrar variaciones en tu servidor.

3

Verifica y responde 2xx

Comprueba webhook-signature, responde rápido y procesa después. Desde el panel puedes mandar un aviso de prueba.

Planes

Planes, tasas y frecuencia de los webhooks.

Los webhooks están incluidos desde el plan Growth. Ambos planes incluyen BCV dólar, BCV euro, dólar paralelo y Binance P2P. Cambian la frecuencia de Binance, el número de webhooks y el cupo de avisos de la cuenta.

Tasas, frecuencias y límites de los webhooks de Cotizave por plan
Tasas por webhookGrowthBinance cada 30 minutos y 1 webhook.ProBinance cada 15 minutos y 2 webhooks.
OficialBCV dólar y BCV euroAl detectar un cambioAl detectar un cambio
MercadoDólar paraleloAl detectar un cambioAl detectar un cambio
Binance P2PCada 30 minCada 15 min
Webhooks12
Webhook de prueba+1+1
Avisos al mes (tope de la cuenta, compartido entre tus webhooks)2.0004.000
Detalle de envíos fallidos2 días3 días
Conteo de envíos por día30 días30 días
Cabeceras propias33

Revisamos las fuentes cada 5 minutos. Los avisos salen al detectar un valor distinto del último enviado; en Binance, en una revisión después de cumplirse el intervalo del plan. No se envían todos los movimientos intermedios ni se garantiza una hora exacta de entrega.

Free, Inicio y Basic no incluyen webhooks. Empresa incluye 10. Al llegar al tope, los cambios de Binance dejan de disparar avisos hasta el día 1 de cada mes, hora UTC; su valor actual sigue viajando cuando avisa el BCV o el paralelo, y los avisos de cuenta siguen llegando. El tope es de la cuenta, no de cada webhook: alcanza para un webhook con Binance a la velocidad de tu plan. Si sigues Binance en varios webhooks, puedes llegar al tope antes de fin de mes. Las demás tasas del catálogo se consultan por la API, pero todavía no avisan por webhook.

Seguridad

Cómo verificar la firma del webhook.

Verificación HMAC SHA-256 con ejemplos para Node.js, Python, PHP y Go.

  1. 1Lee webhook-id, webhook-timestamp y webhook-signature, y el cuerpo sin parsear.
  2. 2Rechaza avisos con un timestamp de más de 5 minutos.
  3. 3Calcula el HMAC de id.timestamp.cuerpo y compáralo en tiempo constante.
  4. 4Responde 2xx en menos de 10 s y procesa en segundo plano. Usa webhook-id para descartar duplicados.

Seguimos el estándar Standard Webhooks, así que sus librerías oficiales verifican nuestros avisos sin código propio. Si varios webhooks apuntan a la misma URL, elige el secreto con la cabecera cotizave-webhook-id. Guía de verificación de firmas.

Verificar webhook-signature
// Node.js import crypto from "node:crypto"; // Un secreto por webhook: cotizave-webhook-id dice cuál lo envió. const secrets = { "3f1c9a2e-…": process.env.COTIZAVE_WEBHOOK_SECRET }; export function verify(headers, rawBody) { const secret = secrets[headers["cotizave-webhook-id"]]; if (!secret) return false; const id = headers["webhook-id"]; const ts = headers["webhook-timestamp"]; const signatures = headers["webhook-signature"]; if (!id || typeof ts !== "string" || typeof signatures !== "string") return false; if (!/^\d+$/.test(ts) || !Number.isSafeInteger(Number(ts))) return false; if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false; const key = Buffer.from(secret.replace("whsec_", ""), "base64"); const expected = crypto.createHmac("sha256", key) .update(`${id}.${ts}.${rawBody}`).digest("base64"); // Durante una rotación llegan dos firmas: "v1,… v1,…" return signatures.split(" ").some((s) => { const [version, sig] = s.split(","); if (version !== "v1" || !sig) return false; const received = Buffer.from(sig, "base64"); const expectedBytes = Buffer.from(expected, "base64"); return received.length === expectedBytes.length && crypto.timingSafeEqual(received, expectedBytes); }); }

Entregas

Reintentos y recuperación de los webhooks.

Un aviso de tasa solo sirve si llega con el valor vigente. Por eso no te llenamos de tasas viejas cuando tu servidor vuelve.

Reintentos

Hasta 4 intentos ante fallos temporales

Ante 5xx, 408, 429, errores de red o un timeout de 10 segundos, hacemos hasta 4 intentos: al instante y tras esperas aproximadas de 10 s, 30 s y 2 min. En un 429 o 5xx, Retry-After puede alargar la espera hasta 2 min; si pides más, ese aviso no se reintenta. Otro 4xx o una redirección falla sin reintento. Un 410 pausa el webhook.

Sin valores viejos

El aviso nuevo reemplaza al pendiente

Si hay un aviso más nuevo de la misma tasa, cancelamos el pendiente y enviamos el nuevo. Esto también aplica al BCV dólar y euro. Los avisos de cuenta conservan su propio calendario de reintentos, porque cada uno corresponde a un evento distinto.

Recuperación

Comprobaciones con la tasa actual

Si una tasa no llegó, comprobamos cada 5 minutos con su valor actual hasta que tu servidor responda 2xx o el webhook se pause. Al recuperarse, enviamos las tasas pendientes. Estas comprobaciones no consumen cupo. Los avisos de cuenta fallidos se reenvían a mano desde el historial.

Pausa

Pausa tras fallos continuados

Con 6 fallos seguidos y al menos 10 minutos fallando, pausamos el webhook y te avisamos en el panel; en Pro, también por correo. Un 2xx pone el contador en cero. Puedes reactivarlo desde el panel para sincronizar tus tasas, con los límites indicados abajo.

Tu servidor

Despliega sin cortar

Para que un despliegue no sume fallos, actualiza tu servidor sin dejarlo caído: con dos instancias o un despliegue gradual (rolling). Y responde 2xx rápido: guarda el aviso y procésalo después.

Historial

Cada envío, con su respuesta

De cada envío fallido: cada intento con su hora, código y duración, el cuerpo enviado y el primer 1 KB de tu respuesta (visible desde que tu webhook respondió 2xx alguna vez). Puedes reenviar hasta 20 envíos por día. Los fallidos se guardan 1 día (2 en Growth, 3 en Pro) y los exitosos 24 horas; el gráfico cuenta los envíos de cada día durante 30 días.

Pruebas

Un webhook de prueba aparte

Desde el panel manda a tu webhook de prueba un ping o un aviso de tasas con todas las que sigues, sin tocar producción. Usa las tasas reales actuales y llega con delivery_type "test". Hasta 10 pruebas por hora y 30 por día, una cada 10 segundos. No cuentan para tu tope de avisos.

Credenciales

Ver y rotar el secreto

Puedes volver a ver el secreto de firma desde el panel (10 veces por día). Si se filtra, rótalo y elige cuánto sigue valiendo el anterior: nada, 1 h, 24 h o 7 días. Ver o rotar el secreto pide haber iniciado sesión hace menos de 1 hora. Tus cabeceras propias, como Authorization, se guardan cifradas.

Sincronización al crear, editar o reactivar: enviamos el último valor disponible de las tasas elegidas, como máximo una vez por tasa y webhook cada 15 minutos. Si ya agotaste el cupo del mes, Binance permanece bloqueado también para la sincronización y la recuperación. Estos envíos no suman consumo al cupo. Consultar la guía de entregas y reintentos.

El aviso

Qué datos recibes en el JSON del webhook.

Las tasas llegan juntas en un solo rates.updated, con el precio de cada una, cuál cambió y, cuando existe, el valor anterior del mercado. El campo delivery_type distingue un cambio de una sincronización o recuperación.

  • Consumo: al 80 %, 95 % y 100 % de tus consultas del mes.
  • Plan: 7 días y 1 día antes de que venza, y cuando vence.
  • Fuentes: cuando las tasas de una fuente llevan 15 minutos sin llegar, y cuando vuelven (solo si te avisamos la caída).

Los avisos de cuenta los eliges por webhook, llegan a la misma URL, firmados igual, y cuentan para tu tope de avisos. Ver todos los eventos.

marketLa tasa: reference (BCV dólar), eur_reference (BCV euro), parallel o binance.
mid · ask · bidPunto medio, venta y compra en bolívares (por euro en el BCV euro, por dólar en las demás). ask y bid se omiten si la fuente no los publica.
change_pctVariación de mid contra el valor anterior del mercado, en %. Úsalo para descartar los cambios chicos de tu lado. Se omite si no hay valor anterior.
effective_dateSolo en el BCV: el día desde el que rige la tasa.
updated_atCuándo se observó el valor.
previous_midEl valor anterior del mercado. Puede ser distinto del último que recibiste. Se omite si no hay.
timestampEn el sobre: cuándo generamos el aviso (ISO 8601). No cambia entre reintentos.
delivery_typeEn el sobre: por qué salió, por ejemplo change (cambió la tasa), sync (el valor actual al crear o editar el webhook) o test (un aviso de prueba).

Ayuda

Preguntas frecuentes sobre Cotizave.

¿Qué es un webhook de tasas de cambio?
Es una notificación que Cotizave envía a tu servidor mediante un POST con un JSON firmado, sin que tengas que programar consultas periódicas a la API. BCV y paralelo avisan al detectar un cambio; la frecuencia de Binance depende del plan. El aviso incluye el valor de la tasa y, cuando existe, el valor anterior del mercado.
¿Cómo recibir la tasa BCV, el paralelo o Binance por webhook?
Registra una URL HTTPS pública en el panel de Cotizave y elige las tasas: BCV dólar (reference), BCV euro (eur_reference), dólar paralelo (parallel) y Binance P2P (binance). Las cuatro están disponibles desde Growth. En tu servidor verificas la firma, guardas el aviso y respondes 2xx en menos de 10 segundos.
¿Cada cuánto llegan los webhooks de Binance P2P?
Como máximo una vez cada 30 minutos en Growth y cada 15 minutos en Pro. Solo enviamos un aviso si el valor cambió desde el último enviado. Revisamos las fuentes cada 5 minutos: el envío sale en una revisión después de cumplirse el intervalo, sujeto al cupo mensual. No recibes todos los movimientos intermedios.
¿En qué planes están los webhooks?
Están incluidos desde Growth: 1 webhook con las 4 tasas, Binance cada 30 minutos y 2.000 avisos al mes. Pro incluye 2 webhooks, Binance cada 15 minutos, 4.000 avisos al mes y 3 días de detalle de los envíos fallidos. Empresa incluye 10 webhooks. El BCV y el paralelo avisan al detectar un cambio. Cada plan con webhooks suma uno de prueba. Free, Inicio y Basic no incluyen webhooks.
¿Los avisos gastan mi cuota de consultas?
No. Solo cuentan las consultas que haces tú a la API. Los avisos tienen su propio tope mensual, separado de la cuota de consultas.
¿Cómo sé que el aviso viene de Cotizave?
Cada aviso va firmado con HMAC SHA-256 usando el secreto de firma de tu webhook, con el formato Standard Webhooks. Verificas la cabecera webhook-signature antes de procesar el cuerpo. Arriba tienes el código para Node, Python, PHP y Go.
¿Qué pasa si mi servidor está caído?
Ante errores de red, 5xx, 408 o 429 hacemos hasta 4 intentos, salvo que llegue una tasa nueva que reemplace el aviso o pidas un Retry-After mayor a 2 minutos. Si se agotan, comprobamos cada 5 minutos con la tasa actual hasta que respondas 2xx o el webhook se pause. Con 6 fallos seguidos y al menos 10 minutos fallando, lo pausamos y te avisamos en el panel; en Pro, también por correo. Los reintentos y las comprobaciones no gastan el cupo.
¿Puedo recibir solo los cambios grandes?
Puedes filtrar los avisos en tu servidor. Cuando hay un valor anterior del mercado, el aviso incluye change_pct, su variación en porcentaje. Si quieres medir el cambio acumulado desde el último aviso que procesaste, compara mid con tu propio valor guardado.
¿Qué pasa cuando llego al tope de avisos del mes?
Los cambios de Binance dejan de disparar avisos hasta que el tope se reinicie, el día 1 de cada mes, hora UTC. Su valor actual sigue viajando en cada aviso del BCV o del paralelo, y los avisos de tu cuenta siguen llegando. El tope es de la cuenta, no de cada webhook: alcanza para un webhook con Binance a la velocidad de tu plan. Si sigues Binance en varios webhooks, puedes llegar al tope antes de fin de mes. Cuentan para el tope los cambios de tasa y los avisos de cuenta. No cuentan los reintentos, las comprobaciones, el valor actual que te mandamos al crear, editar o reactivar un webhook o al volver tu servidor, ni las pruebas.

Recibe las tasas de Venezuela en tu servidor.

Integra BCV dólar y euro, dólar paralelo y Binance P2P con avisos firmados. Consulta los planes para elegir la frecuencia y el cupo que necesitas.