Consulta por fecha

Consultá a cuánto estaba cualquier cotización en una fecha (y opcionalmente una hora) determinada, con datos que llegan hasta 2010.

Autenticación requerida

Como el resto de los datos históricos, este endpoint necesita una API Key válida, en el header Authorization: Bearer <TU_API_KEY> o en x-api-key. Obtenela en tu cuenta.

Mientras que /api/v2/history/... devuelve una serie entre dos fechas, este endpoint responde una pregunta puntual: ¿a cuánto estaba esto en tal momento?

curl -H "Authorization: Bearer $MONEDAPI_KEY" \
  https://monedapi.ar/api/v2/date/2015-06-01/usd/blue
{
  "requestedAt": "2015-06-01T23:59:59.999-03:00",
  "currency": "USD",
  "name": "Dólar blue",
  "origin": "BLUE",
  "buy": 12.53,
  "sell": 12.63,
  "valueType": "money",
  "quotedAt": "2015-06-01T18:00:00.000-03:00",
  "sameDay": true,
  "daysStale": 0,
  "ageSeconds": 21599
}

Las tres formas

EndpointDevuelve
GET /api/v2/date/{date}Un array con todas las cotizaciones
GET /api/v2/date/{date}/{currency}Un array con todos los orígenes de una moneda
GET /api/v2/date/{date}/{currency}/{origin}Un objeto: una sola cotización

{date} va en formato YYYY-MM-DD y se interpreta en hora argentina.

Query parameters

CampoTipoDescripción
timestringOpcional. Hora argentina, HH:MM o HH:MM:SS. Por defecto, el final del día (23:59:59).
max_agenumberOpcional. Antigüedad máxima en segundos; lo más viejo vuelve con buy/sell en null.

Campos de la respuesta

CampoDescripción
requestedAtEl instante que se consultó, ya resuelto en hora argentina.
buy / sellLos valores de la cotización devuelta, o null (ver más abajo).
valueTypemoney, points (Riesgo País) o coefficient (CER) — la unidad para formatear el número.
quotedAtCuándo se registró realmente la cotización devuelta.
sameDaySi quotedAt cae en el mismo día calendario argentino que requestedAt.
daysStaleDías calendario de atraso entre una y otra.
ageSecondsLo mismo, en segundos — el útil cuando pedís una hora concreta.

Los cuatro últimos existen por una razón concreta: en una misma respuesta conviven cotizaciones del día pedido con otras de hace semanas, y sin ellos serían indistinguibles. Ver Antigüedad dispar.

La regla: la última cotización anterior al instante pedido

Hay una sola regla, y de ella se derivan todos los comportamientos:

Se devuelve la última cotización registrada con fecha menor o igual al instante pedido.

Una consulta sin time es simplemente una consulta al final del día. Por eso, si ese día no hubo cotización, se devuelve la anterior disponible — no es una regla aparte, es la misma.

El domingo 2026-08-02 el blue no cotizó:

GET /api/v2/date/2026-08-02/usd/blue
{
  "requestedAt": "2026-08-02T23:59:59.999-03:00",
  "buy": 1540,
  "sell": 1560,
  "quotedAt": "2026-07-31T13:04:01.574-03:00",
  "sameDay": false,
  "daysStale": 2,
  "ageSeconds": 212158
}

Es la cotización del viernes 31, y la respuesta lo dice.

Nunca se devuelve una cotización posterior

Semántica as-of, no “la más cercana”

Aunque una cotización posterior esté más cerca en el tiempo, no se devuelve nunca.

El 2026-08-03 el dólar cripto tiene cotizaciones a las 14:26:01 (1575.41) y a las 14:32:02 (1574.72). Pidiendo las 14:30:

GET /api/v2/date/2026-08-03/usd/cripto?time=14:30

devolvemos 1575.41, la de 14:26:01, aunque la de 14:32:02 esté a 2 minutos y la nuestra a casi 4.

El motivo es que 1574.72 es un precio que a las 14:30 todavía no existía. Devolverlo metería información del futuro en la respuesta y arruinaría cualquier simulación histórica construida sobre el endpoint: una estrategia backtesteada así daría resultados imposibles de reproducir en vivo.

Cuándo viene null

buy y sell vuelven en null cuando no hay ninguna cotización anterior al instante pedido, normalmente porque el par todavía no existía. El item no desaparece del array: el largo de la respuesta es siempre el mismo, así que iterarla no se rompe al consultar fechas viejas.

ARG/UVA arranca el 2016-03-31 y USD/CRIPTO el 2026-05-04, así que al 2015-06-01:

[
  { "currency": "USD", "origin": "BLUE",   "buy": 12.53, "sell": 12.63, "daysStale": 0 },
  { "currency": "ARG", "origin": "UVA",    "buy": null,  "sell": null,  "quotedAt": null, "daysStale": null },
  { "currency": "USD", "origin": "CRIPTO", "buy": null,  "sell": null,  "quotedAt": null, "daysStale": null }
]

Un 404 significa que la moneda u origen no existen en MonedAPI. Un 200 con null significa que existen pero todavía no cotizaban. No son lo mismo.

Antigüedad dispar

Las fuentes no actualizan todas al mismo ritmo, y alguna puede quedar congelada. Una sola consulta al domingo 2026-08-02 devuelve esto:

CotizacionesquotedAtdaysStale
USD/CCL, USD/CRIPTO, USD/MAYORISTA, ARG/CERDom 2 ago0
USD/FUTUROSáb 1 ago1
USD/BLUE, USD/OFICIAL, USD/BOLSA, EUR/BNA, ARG/RIESGO, ARG/UVA, CLP, UYUVie 31 jul2
USD/BNA, USD/TARJETAJue 30 jul3
BRL/BNALun 6 jul27

Si tu caso de uso no tolera ese atraso, usá max_age (en segundos): las cotizaciones que lo superen vuelven con buy y sell en null, pero conservan quotedAt, daysStale y ageSeconds, así que siempre podés ver qué se descartó y por qué.

# Nada de más de 7 días
GET /api/v2/date/2026-08-02?max_age=604800

Lo que el endpoint responde de verdad

No hay resolución intradiaria antes del 2026-05-04

El grueso de la historia previa a esa fecha se cargó una fila por día hábil, registrada al cierre (18:00 hora argentina). Pedir una hora anterior a las 18:00 en una fecha vieja devuelve, por lo tanto, el cierre del día hábil anterior.

GET /api/v2/date/2015-06-01/usd/blue?time=10:00

devuelve 12.55 / 12.65 con quotedAt del viernes 29 de mayo, no del lunes 1 de junio: a las 10:00 de ese lunes, el último dato que MonedAPI conocía era el cierre del viernes.

Es correcto bajo la regla, pero conviene tener claro el encuadre general:

El endpoint devuelve el último valor que MonedAPI conocía en el instante consultado, no el precio de mercado de ese instante.

Con quotedAt en la respuesta, la diferencia siempre está a la vista.

Errores

CasoRespuesta
Sin API key, o inválida401
date o time mal formadas400
date posterior a hoy (hora argentina)400
Moneda u origen inexistentes404
Par existente, sin cotización previa al instante200 con buy/sell en null

Pedir hoy sin time es válido: resuelve al final del día de hoy y devuelve la última cotización conocida.

En esta página