Webhooks

Cómo usar los webhooks de MonedAPI.

Webhooks

Los webhooks te permiten recibir notificaciones en tiempo real cuando cambian las cotizaciones.

Seguridad

Los webhooks se envían desde la infraestructura de Supabase. Para verificar que el envío es auténtico, debes validar la firma de la petición.

Headers

Los envíos automáticos (rate.updated) incluyen los siguientes headers de seguridad:

  • X-MonedAPI-Signature: HMAC-SHA256 del payload.
  • X-MonedAPI-Timestamp: Unix timestamp del envío.

[!IMPORTANT] Los disparos manuales de prueba (manual.trigger, botón "Probar" en el panel) se envían directamente y no incluyen la firma HMAC. Solo llevan los headers Content-Type, User-Agent, X-MonedAPI-Webhook-Id y, si lo configuraste, Authorization. Validá la firma únicamente en los eventos automáticos.

Estados de Entrega

Cada intento de envío queda registrado con uno de estos estados (consultable vía el historial):

EstadoDescripción
pendingEn cola, esperando ser enviado.
sendingEnviándose en este momento.
deliveredEntregado correctamente (respuesta 2xx).
failedFalló el último intento; será reintentado.
deadFalló definitivamente después de 4 intentos.

Estructura del Payload

Cuando se produce un cambio en una cotización, enviamos un JSON con los siguientes campos a tu URL:

{
  "event": "rate.updated",
  "currency": "USD",
  "origin": "BNA",
  "buy": 950.5,
  "sell": 1000.0,
  "prevBuy": 948.0,
  "prevSell": 998.5,
  "changePct": 0.15,
  "updatedAt": "2024-05-20T14:30:00Z",
  "timestamp": "2024-05-20T14:31:05Z"
}

Descripción de Campos

CampoTipoDescripción
eventstringTipo de evento (rate.updated para cambios, manual.trigger para pruebas).
currencystringCódigo de la moneda (ej: USD, EUR).
originstringOrigen de la cotización (ej: BNA).
buynumberPrecio de compra actual.
sellnumberPrecio de venta actual.
prevBuynumberPrecio de compra anterior al cambio.
prevSellnumberPrecio de venta anterior al cambio.
changePctnumberPorcentaje de variación respecto a la última cotización de venta.
updatedAtstringFecha y hora ISO del dato en la fuente original.
timestampstringFecha y hora ISO en la que se envió la notificación.
isManualbooleanSolo presente en disparos de prueba (manual.trigger). Vale true.

[!NOTE] En los disparos de prueba (event: "manual.trigger") no hubo un cambio real de cotización, por lo que prevBuy/prevSell reflejan los valores actuales, changePct es siempre 0 y se incluye el campo isManual: true. Sirve para validar la conectividad de tu endpoint, no para detectar variaciones.

[!NOTE] Si la URL del destino corresponde a Discord, el payload se envía automáticamente formateado como un Embed enriquecido (colores, campos en columnas, etc.) para que aparezca correctamente en tu canal de Discord sin necesidad de adaptadores.


Gestión vía API (v2)

Puedes gestionar tus webhooks y consultar el historial de envíos utilizando la API v2. Todas las peticiones requieren una API Key válida.

Listar Webhooks

GET /api/v2/webhooks

curl -H "Authorization: Bearer <TU_API_KEY>" \
     https://monedapi.ar/api/v2/webhooks

Crear Webhook

POST /api/v2/webhooks

CampoTipoDescripción
urlstringURL de destino de las notificaciones.
methodstringOpcional. Método HTTP (POST, GET). Por defecto POST.
enabledbooleanOpcional. Habilitar o deshabilitar el webhook.
currencynumberOpcional. ID de la moneda específica a la que suscribirse (vía currencies).
curl -X POST -H "Authorization: Bearer <TU_API_KEY>" \
     -H "Content-Type: application/json" \
     -d '{"url": "https://mi-servidor.com/webhook", "currency": 1}' \
     https://monedapi.ar/api/v2/webhooks

Consultar Historial

GET /api/v2/webhooks/deliveries

Este endpoint devuelve los últimos 50 intentos de envío, incluyendo el payload enviado y la respuesta de tu servidor.

curl -H "Authorization: Bearer <TU_API_KEY>" \
     https://monedapi.ar/api/v2/webhooks/deliveries?limit=10

On this page