API para desarrolladores
Deja de consultar, nosotros te avisamos
Registra una URL y elige eventos. Enviamos un POST firmado segundos después de cada cambio y reintentamos durante hasta 24 horas si falla.
Eventos
rate.updatedUn tipo de cambio cambió en algún bancorate.best_changedCambió la venta más barata o la compra más altarate.threshold_crossedUn tipo cruzó un límite que fijastecbe.rate_changedCambió el tipo del Banco Centralgold.updatedCambiaron los precios del orosilver.updatedCambiaron los precios de la platatransfer.quotes_updatedCambiaron los precios de los proveedores de transferenciascertificate.createdUn banco lanzó un nuevo certificadocertificate.rate_changedCambió la rentabilidad de un certificadotbill.auction_resultUn resultado de subasta de letras del Tesorofund.price_updatedSe actualizó el precio de la participación de un fondostatus.incidentUna incidencia del servicio empezó o terminóQué enviamos
POST https://example.com/geneh
Geneh-Event: rate.best_changed
Geneh-Signature: t=1792118220,v1=5f2b9c1e7a
{
"id": "evt_01JB7Q2K",
"type": "rate.best_changed",
"created_at": "2026-10-16T00:37:00Z",
"data": {
"currency": "USD",
"side": "sell",
"previous": { "bank": "nbe", "rate": 53.52 },
"current": { "bank": "credit_agricole", "rate": 53.47 }
}
}Comprueba la firma
Cada solicitud se firma con el secreto de tu endpoint usando HMAC SHA-256. Rechaza todo lo que tenga más de 5 minutos.
import crypto from "node:crypto";
function verify(rawBody, header, secret) {
const [t, v1] = header.split(",").map(p => p.split("=")[1]);
const mac = crypto.createHmac("sha256", secret)
.update(t + "." + rawBody).digest("hex");
const fresh = Math.abs(Date.now() / 1000 - t) < 300;
return fresh && crypto.timingSafeEqual(Buffer.from(mac), Buffer.from(v1));
}Entrega y reintentos
- Tiempo de espera
- Responde con un 2xx en menos de 10 segundos
- Reintentos
- 8 intentos durante 24 horas, cada vez más espaciados
- Duplicados
- Un evento puede llegar dos veces, así que usa su id para saltar los repetidos
- Orden
- Compara created_at, porque el orden no está garantizado
- Pausa
- Pausamos un endpoint tras 3 días de fallos y te avisamos por correo, y puedes reenviar lo que te perdiste
Tus endpoints
Los webhooks están en caminoPodrás añadir endpoints aquí cuando se abran los webhooks. Vienen incluidos desde el plan Pro.
Próximamente