Documentación /

Tipos de cambio históricos

Usa la fecha en la ruta para una observación o `/v1/range` para una serie. Los datos publicados empiezan el 1999-01-04.

Solicita una fecha

En fin de semana o festivo se devuelve el último fixing publicado y `is_forward_filled` vale true. No se inventa una observación.

bash · one date
curl "https://api.exchangerate.dev/v1/2024-01-15/EUR?symbols=USD,GBP"

Solicita un intervalo

Indica `symbols`, `start_date` y `end_date`. JSON devuelve hasta 366 filas por página; continúa con `next_cursor` cuando `has_more` sea true.

bash · date range
curl "https://api.exchangerate.dev/v1/range?base=USD&symbols=EUR,GBP&start_date=2024-01-01&end_date=2024-06-30"

Descarga CSV o Parquet

Añade `format=csv` o `format=parquet`. La descarga contiene todo el intervalo solicitado y no usa cursor JSON.

bash · CSV
curl -L "https://api.exchangerate.dev/v1/range?base=USD&symbols=EUR,GBP&start_date=2024-01-01&end_date=2024-12-31&format=csv"   --output usd-rates-2024.csv

Conserva la procedencia

Guarda `source`, `is_forward_filled` y `derived_symbols` junto a cada observación. Sin ellos, luego no podrás explicar el dato.

source · is_forward_filled · derived_symbols

Series intradía y cobertura

/v1/timeseries admite 1m, 5m, 15m, 1h, 4h y referencias diarias 1d; no hay 2h. Los cruces SGD sin USD no admiten 4h; USD/SGD y su inverso sí. La recopilación de mercado comenzó el 2026-09-14. Los datos 1m se conservan 30 días; los intervalos mayores no tienen caducidad programada. La retención no garantiza que ya exista toda esa profundidad.

Los cruces históricos requieren cierres reales del mismo intervalo UTC, separados como máximo 5 segundos. effective_at conserva la observación más antigua. No se rellenan huecos y el intervalo abierto puede cambiar. 1d usa referencias diarias de todo el catálogo. La tabla cuenta pares únicos; se admiten ambos sentidos.

intervalPares únicos
1m91
5m91
15m91
1h91
4h79
1d465
curl · EUR/JPY · 15m
curl "https://api.exchangerate.dev/v1/timeseries?base=EUR&symbols=JPY&interval=15m&from=2026-09-14T12:00:00Z&to=2026-09-14T13:00:00Z"

Una ventana admitida sin observaciones devuelve HTTP 200 con data: [], has_more: false y next_cursor: null. Un intervalo desconocido devuelve unsupported_interval; un par fuera de cobertura, unsupported_pair_interval y rejected_pairs (HTTP 400). Las solicitudes mixtas se rechazan completas.

AUD, CAD, CHF, EUR, GBP, JPY, MXN, NOK, NZD, PLN, SEK, SGD, USD, ZAR

Cobertura y límites detallados

API de tipos de cambio intradía