Ir al contenido

Consulta por fecha

El histórico devuelve una serie entre dos fechas. La consulta por fecha responde una pregunta puntual: ¿a cuánto estaba esto en tal momento?

Ventana de terminal
curl https://monedapi.ar/api/v2/date/2015-06-02/usd/blue
{
"requestedAt": "2015-06-02T23:59:59.999-03:00",
"currency": "USD",
"name": "Dólar Blue",
"origin": "BLUE",
"valueType": "money",
"buy": 12.55,
"sell": 12.65,
"quotedAt": "2015-06-02T18:00:00.000-03:00",
"sameDay": true,
"daysStale": 0,
"ageSeconds": 21599
}

Los datos arrancan en 2010 para los pares más viejos, y cada par tiene su propia fecha de inicio (desde cuándo hay datos). Una fecha anterior al primer dato de un par lo responde con valores en null.

Ruta Devuelve
GET /api/v2/date/{fecha} Un array con todos los pares del catálogo
GET /api/v2/date/{fecha}/{moneda} Un array con los pares de una moneda
GET /api/v2/date/{fecha}/{moneda}/{origen} Un objeto con un solo par

{fecha} va en formato YYYY-MM-DD y se interpreta en hora argentina. Los arrays siguen el orden de la tabla de pares.

Ventana de terminal
curl https://monedapi.ar/api/v2/date/2026-09-29/arg
[
{
"requestedAt": "2026-09-29T23:59:59.999-03:00",
"currency": "ARG",
"name": "Riesgo País",
"origin": "RIESGO",
"valueType": "points",
"buy": 607,
"sell": 607,
"quotedAt": "2026-09-29T18:54:18.079-03:00",
"sameDay": true,
"daysStale": 0,
"ageSeconds": 18341
}
]

El ejemplo está recortado: la respuesta trae también el CER y la UVA.

Parámetro Tipo Qué hace
time HH:MM o HH:MM:SS Opcional. Hora argentina. Por defecto, el final del día (23:59:59.999).
max_age entero Opcional. Antigüedad máxima aceptada, en segundos.
Campo Qué es
requestedAt El instante consultado, en hora argentina.
currency, name, origin El par, como en las cotizaciones actuales.
valueType money, points (Riesgo País) o coefficient (CER): cómo mostrar el número.
buy, sell Los valores vigentes en ese instante, o null.
quotedAt Cuándo se observó el valor devuelto.
sameDay Si quotedAt cae en el mismo día argentino que requestedAt.
daysStale Días calendario argentinos entre quotedAt y requestedAt.
ageSeconds Segundos entre quotedAt y requestedAt. Sirve cuando pedís una hora.

Los cuatro últimos existen porque en una misma respuesta conviven valores del momento pedido con otros que no cambian desde hace días. Sin ellos no se podrían distinguir.

Hay una sola regla, y de ella salen todos los casos:

Se devuelve el último valor observado en el instante pedido o antes.

Una consulta sin time es una consulta al final del día. Si ese día el par no cambió, se devuelve el último valor anterior; no es un caso aparte, es la misma regla.

El 30 de septiembre, a las 12:00, el blue seguía con el valor del día anterior:

Ventana de terminal
curl "https://monedapi.ar/api/v2/date/2026-09-30/usd/blue?time=12:00"
{
"requestedAt": "2026-09-30T12:00:00.000-03:00",
"currency": "USD",
"name": "Dólar Blue",
"origin": "BLUE",
"valueType": "money",
"buy": 1540,
"sell": 1560,
"quotedAt": "2026-09-29T18:54:13.917-03:00",
"sameDay": false,
"daysStale": 1,
"ageSeconds": 61546
}

quotedAt es del 29, y la respuesta lo dice con sameDay y daysStale.

Aunque un valor posterior esté más cerca del instante pedido, no se devuelve.

El 30 de septiembre el dólar cripto cambió a 1.597,58 a las 18:18:24 y a 1.598,93 a las 18:23:24. Pidiendo las 18:22:

Ventana de terminal
curl "https://monedapi.ar/api/v2/date/2026-09-30/usd/cripto?time=18:22"
{
"requestedAt": "2026-09-30T18:22:00.000-03:00",
"currency": "USD",
"name": "Dólar Cripto",
"origin": "CRIPTO",
"valueType": "money",
"buy": 1597.58,
"sell": 1597.58,
"quotedAt": "2026-09-30T18:18:24.575-03:00",
"sameDay": true,
"daysStale": 0,
"ageSeconds": 215
}

Devuelve 1.597,58, el valor de las 18:18:24, aunque el de las 18:23:24 esté más cerca. A las 18:22 ese precio todavía no existía. Devolverlo metería información del futuro en la respuesta, y cualquier simulación armada sobre la API daría resultados imposibles de repetir en vivo.

Lo que MonedAPI conocía, no el precio de mercado

Sección titulada «Lo que MonedAPI conocía, no el precio de mercado»

Los valores se observan cada 5 minutos. La consulta devuelve el último valor que MonedAPI había observado en el instante pedido, no el precio exacto del mercado en ese segundo. quotedAt deja la diferencia a la vista.

buy y sell vuelven en null cuando no hay ningún valor observado antes del instante pedido, por ejemplo en una fecha anterior al primer dato del par:

Ventana de terminal
curl https://monedapi.ar/api/v2/date/2009-12-31/usd/blue
{
"requestedAt": "2009-12-31T23:59:59.999-03:00",
"currency": "USD",
"name": "Dólar Blue",
"origin": "BLUE",
"valueType": "money",
"buy": null,
"sell": null,
"quotedAt": null,
"sameDay": false,
"daysStale": null,
"ageSeconds": null
}

En las formas que devuelven un array, el par no desaparece: la respuesta trae siempre una entrada por par, así que recorrerla no se rompe al consultar fechas viejas.

Las fuentes no actualizan todas al mismo ritmo: hay dólares que cambian cada pocos minutos e índices que cambian una vez por día. La consulta del 30 de septiembre a las 12:00 devuelve, entre otros:

Pares quotedAt daysStale
USD/OFICIAL, USD/CCL, USD/CRIPTO, USD/BOLSA, USD/FUTURO 30/9, 11:47 0
ARG/RIESGO 30/9, 10:53 0
ARG/CER, ARG/UVA 30/9, 00:04 0
USD/BLUE, EUR/BNA 29/9, 18:54 1
BRL/BNA 6/7, 15:04 86

Si tu caso no tolera ese atraso, usá max_age, en segundos. Los pares que lo superan vuelven con buy y sell en null, pero conservan quotedAt, sameDay, daysStale y ageSeconds, así que siempre ves qué se descartó y por qué.

Ventana de terminal
curl "https://monedapi.ar/api/v2/date/2026-09-30?time=12:00&max_age=3600"
[
{
"requestedAt": "2026-09-30T12:00:00.000-03:00",
"currency": "USD",
"name": "Dólar Banco Nación",
"origin": "BNA",
"valueType": "money",
"buy": 1490,
"sell": 1540,
"quotedAt": "2026-09-30T11:17:58.536-03:00",
"sameDay": true,
"daysStale": 0,
"ageSeconds": 2521
},
{
"requestedAt": "2026-09-30T12:00:00.000-03:00",
"currency": "USD",
"name": "Dólar Blue",
"origin": "BLUE",
"valueType": "money",
"buy": null,
"sell": null,
"quotedAt": "2026-09-29T18:54:13.917-03:00",
"sameDay": false,
"daysStale": 1,
"ageSeconds": 61546
}
]

El ejemplo está recortado: la respuesta trae los 16 pares.

Pedir la fecha de hoy es válido, con o sin time, incluso con una hora que todavía no llegó: responde el último valor conocido de cada par.

  • Un instante de hace más de 24 horas no cambia más, y se sirve con Cache-Control: public, max-age=86400.
  • Cualquier otro pedido tiene hasta 60 segundos de caché.
Caso Respuesta
Fecha con otro formato o inexistente 400 con {"error":"Fecha inválida. Formato esperado: YYYY-MM-DD."}
Fecha posterior a hoy en Argentina 400 con {"error":"La fecha es posterior al día de hoy en Argentina."}
time inválido 400 con {"error":"Hora inválida. Formato esperado: HH:MM o HH:MM:SS."}
max_age que no es un entero no negativo 400 con {"error":"max_age inválido. Se espera un número entero de segundos."}
Moneda o par fuera del catálogo 404 con {"error":"Cotización no encontrada"}
Par del catálogo sin valor antes del instante 200 con buy y sell en null
Más de 20 pedidos en 10 segundos desde la misma IP 429 en texto plano, con Retry-After: 10
El almacenamiento del histórico no responde 503 con {"error":"Servicio temporalmente no disponible"} y Retry-After: 30
Ventana de terminal
curl "https://monedapi.ar/api/v2/date/2026-09-30/usd/blue?time=25:00"
{ "error": "Hora inválida. Formato esperado: HH:MM o HH:MM:SS." }
Ventana de terminal
curl https://monedapi.ar/api/v2/date/2026-09-30/xxx/blue
{ "error": "Cotización no encontrada" }

El límite de 20 pedidos cada 10 segundos es por IP y se comparte con el histórico.