Resumen
Lume Exchange Rates reúne comparación, conversión e historial para viajes, precios internacionales y desarrollo de productos.
La fuente configurada es Proveedor externo de tipos de cambio. Las respuestas incluyen la fuente y la fecha de publicación. Las divisas disponibles dependen de los datos reales.
Inicio rápido
Consulta primero el catálogo de divisas y después elige anchor y targets. Los campos y códigos son iguales en todos los idiomas.
curl --request GET 'https://lumeexchangerates.com/v1/quotes?anchor=USD&targets=EUR,JPY'const response = await fetch('/v1/quotes?anchor=USD&targets=EUR,JPY', {
credentials: 'same-origin'
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const { meta, anchor, data } = await response.json();
console.log(anchor, meta.as_of, data);El ejemplo del navegador usa el mismo origen. cURL y las solicitudes de servidor a un sitio privado requieren acceso autorizado; la URL no evita el inicio de sesión.
Acceso y autenticación
El acceso sigue los permisos del sitio y la sesión del navegador. No hay claves de cliente, autenticación Bearer de cliente ni API pública entre orígenes. Conserva el App ID del proveedor en el servidor.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Base URL | URL | https://lumeexchangerates.com |
| Content-Type | header | application/json |
| Customer API key | — | Esta vista previa usa la sesión del navegador. Aún no emite claves API individuales para clientes. |
| Provider App ID | server secret | OPEN_EXCHANGE_RATES_APP_ID |
| CORS | same-origin | Actualmente no se envían cabeceras que permitan solicitudes entre orígenes. |
Authorization: Token solo lo usa el servidor Lume Exchange Rates para contactar con Proveedor externo de tipos de cambio; no autentica clientes. El control de acceso puede devolver HTML o redirecciones: comprueba el estado HTTP y Content-Type.
Endpoints
| Method | Path | Descripción |
|---|---|---|
| GET | /v1/currencies | Todos los símbolos con tipos actuales y sus nombres. Incluye divisas alternativas y metales disponibles. |
| GET | /v1/quotes | Divisa base; USD por defecto. Acepta todos los símbolos actuales del proveedor. |
| GET | /v1/exchange | Importe numérico no negativo que se desea convertir. |
| GET | /v1/history | Consulta una fecha con /v1/history y un intervalo con /v1/series. |
| GET | /v1/series | Consulta una fecha con /v1/history y un intervalo con /v1/series. |
| GET | /v1/candles | OHLC |
| GET | /v1/capabilities | Disponibilidad |
| GET | /api/rates/latest | Último tipo publicado |
| GET | /api/currencies | Divisa |
| GET | /api/rates/history | Gráficos |
| GET | /api/rates/previous | Día UTC anterior |
| POST | /api/convert | Conversor |
/v1 ofrece consultas simplificadas; /api proporciona los contratos de tipos actuales, historial y conversión de la web. Sus valores predeterminados y respuestas son distintos.
GET /v1/currencies
Todos los símbolos con tipos actuales y sus nombres. Incluye divisas alternativas y metales disponibles.
Parámetro: —
curl --request GET 'https://lumeexchangerates.com/v1/currencies'Los valores y fechas ilustran la estructura; no son tipos actuales. Las listas pueden estar abreviadas. Usa el explorador API para obtener datos reales.
{
"meta": {
"mode": "provider",
"source": "Proveedor externo de tipos de cambio",
"source_url": "https://openexchangerates.org/",
"as_of": "2026-01-01T00:00:00.000Z",
"fetched_at": "2026-01-01T00:00:05.000Z",
"currency_count": 3,
"includes_alternative": true,
"refresh_interval_seconds": 300,
"provider_plan": "Unlimited",
"notice": "Illustrative response; not live rates."
},
"data": [
{
"code": "USD",
"name": "United States Dollar"
},
{
"code": "EUR",
"name": "Euro"
},
{
"code": "JPY",
"name": "Japanese Yen"
}
]
}| Parámetro | Tipo | Descripción |
|---|---|---|
| data[].code | string | Código en mayúsculas. Los activos alternativos pueden superar tres caracteres o incluir guiones bajos. |
| data[].name | string | Nombre de la divisa proporcionado por el proveedor, o su código si no hay nombre. |
GET /v1/quotes
Divisa base; USD por defecto. Acepta todos los símbolos actuales del proveedor.
| Parámetro | Tipo | Obligatorio | Predeterminado | Descripción |
|---|---|---|---|---|
| anchor | string | Opcional | USD | Divisa base; USD por defecto. Acepta todos los símbolos actuales del proveedor. |
| targets | string | Opcional | todas | Símbolos de destino separados por comas. Omítelo para devolver todos los símbolos disponibles. |
curl --request GET 'https://lumeexchangerates.com/v1/quotes?anchor=USD&targets=EUR,JPY'Los valores y fechas ilustran la estructura; no son tipos actuales. Las listas pueden estar abreviadas. Usa el explorador API para obtener datos reales.
{
"meta": {
"mode": "provider",
"source": "Proveedor externo de tipos de cambio",
"source_url": "https://openexchangerates.org/",
"as_of": "2026-01-01T00:00:00.000Z",
"fetched_at": "2026-01-01T00:00:05.000Z",
"currency_count": 3,
"includes_alternative": true,
"refresh_interval_seconds": 300,
"provider_plan": "Unlimited",
"notice": "Illustrative response; not live rates."
},
"anchor": "USD",
"data": [
{
"currency": "EUR",
"value": 0.9
},
{
"currency": "JPY",
"value": 150
}
]
}Ejemplo: /v1/quotes?anchor=EUR&targets=USD,JPY. value indica unidades de destino por unidad base. Se eliminan targets duplicados; los códigos vacíos, en minúsculas o no disponibles devuelven 400.
| Parámetro | Tipo | Descripción |
|---|---|---|
| anchor | string | Divisa base; USD por defecto. Acepta todos los símbolos actuales del proveedor. |
| data[].currency | string | A |
| data[].value | number | rates[currency] / rates[anchor] |
GET /v1/exchange
Importe numérico no negativo que se desea convertir.
| Parámetro | Tipo | Obligatorio | Predeterminado | Descripción |
|---|---|---|---|---|
| from | string | Opcional | USD | Divisa de origen; USD por defecto. |
| to | string | Opcional | KRW | Divisa de destino; KRW por defecto. |
| quantity | number | Opcional | 1 | Importe numérico no negativo que se desea convertir. |
curl --request GET 'https://lumeexchangerates.com/v1/exchange?from=USD&to=EUR&quantity=100'Los valores y fechas ilustran la estructura; no son tipos actuales. Las listas pueden estar abreviadas. Usa el explorador API para obtener datos reales.
{
"meta": {
"mode": "provider",
"source": "Proveedor externo de tipos de cambio",
"source_url": "https://openexchangerates.org/",
"as_of": "2026-01-01T00:00:00.000Z",
"fetched_at": "2026-01-01T00:00:05.000Z",
"currency_count": 3,
"includes_alternative": true,
"refresh_interval_seconds": 300,
"provider_plan": "Unlimited",
"notice": "Illustrative response; not live rates."
},
"data": {
"from": "USD",
"to": "EUR",
"quantity": 100,
"rate": 0.9,
"result": 90
}
}Ejemplo: /v1/exchange?from=USD&to=EUR&quantity=100. Especifica siempre from y to. Esta ruta GET heredada usa KRW como destino predeterminado. Los valores vacíos, negativos, NaN, infinitos o resultados desbordados devuelven 400.
| Parámetro | Tipo | Descripción |
|---|---|---|
| data.rate | number | rates[to] / rates[from] |
| data.result | number | quantity × rate |
GET /api/rates/latest
Último tipo publicado
Parámetro: —
curl --request GET 'https://lumeexchangerates.com/api/rates/latest'Los valores y fechas ilustran la estructura; no son tipos actuales. Las listas pueden estar abreviadas. Usa el explorador API para obtener datos reales.
{
"meta": {
"provider": "Proveedor externo de tipos de cambio",
"kind": "latest_published",
"provider_timestamp": 1767225600,
"published_at": "2026-01-01T00:00:00.000Z",
"expected_interval_seconds": 300,
"lag_seconds": 5,
"stale": false,
"timezone": "Asia/Seoul",
"fetched_at": "2026-01-01T00:00:05.000Z",
"persistent_storage": false
},
"data": {
"base": "USD",
"rates": {
"USD": 1,
"EUR": 0.9,
"JPY": 150
}
}
}| Parámetro | Tipo | Descripción |
|---|---|---|
| data.base | string | USD |
| data.rates | object | Tipos disponibles relativos a USD; verifica los símbolos en la respuesta más reciente. |
| meta.provider_timestamp | integer | UTC · UNIX seconds |
| meta.published_at | string | ISO 8601 · UTC |
| meta.fetched_at | string | Hora de recuperación del servidor, distinta de la publicación del proveedor. |
| meta.expected_interval_seconds | integer | seconds |
| meta.stale | boolean | Es true si la antigüedad supera max(3 × intervalo previsto, 900 segundos). |
| meta.lag_seconds | integer | Segundos desde la publicación del proveedor. |
| meta.persistent_storage | boolean | Indica si está conectado el servicio de recopilación persistente. |
| meta.kind | string | latest_published | utc_daily |
GET /api/currencies
Divisa
| Parámetro | Tipo | Obligatorio | Predeterminado | Descripción |
|---|---|---|---|---|
| lang | string | Opcional | en | en / ko / ja / zh / es / hi / bn / de / fr / nl / pt / it / ru / vi / th / ar / id / ur |
curl --request GET 'https://lumeexchangerates.com/api/currencies?lang=en'Los valores y fechas ilustran la estructura; no son tipos actuales. Las listas pueden estar abreviadas. Usa el explorador API para obtener datos reales.
{
"meta": {
"provider": "Proveedor externo de tipos de cambio",
"kind": "latest_published",
"provider_timestamp": 1767225600,
"published_at": "2026-01-01T00:00:00.000Z",
"expected_interval_seconds": 300,
"lag_seconds": 5,
"stale": false,
"timezone": "Asia/Seoul",
"fetched_at": "2026-01-01T00:00:05.000Z",
"persistent_storage": false
},
"data": [
{
"code": "USD",
"name": "US Dollar"
},
{
"code": "EUR",
"name": "Euro"
}
]
}Los nombres se localizan con Intl.DisplayNames. Los activos no reconocidos conservan su código. Solo se devuelven símbolos presentes en los datos actuales.
GET /api/rates/history
Consulta una fecha con /v1/history y un intervalo con /v1/series.
| Parámetro | Tipo | Obligatorio | Predeterminado | Descripción |
|---|---|---|---|---|
| from | string | Opcional | USD | De |
| to | string | Opcional | EUR | A |
| period | enum | Opcional | 1M | 1D | 1W | 1M | 3M | 1Y |
curl --request GET 'https://lumeexchangerates.com/api/rates/history?from=USD&to=EUR&period=1W'Los valores y fechas ilustran la estructura; no son tipos actuales. Las listas pueden estar abreviadas. Usa el explorador API para obtener datos reales.
{
"meta": {
"kind": "utc_daily",
"from": "USD",
"to": "EUR",
"period": "1W",
"provider": "Proveedor externo de tipos de cambio",
"persistent_storage": false
},
"data": [
{
"time": "2026-01-01",
"value": 0.9
},
{
"time": "2026-01-02",
"value": 0.91
}
]
}1W comienza hace siete días; 1M, 3M y 1Y siguen el calendario. Todos terminan ayer y excluyen el día UTC incompleto. Se ajustan finales de mes y años bisiestos. Los intervalos largos se dividen por mes y se combinan en orden, sin fechas duplicadas.
| Parámetro | Tipo | Descripción |
|---|---|---|
| data[].time | string | integer | Diario: YYYY-MM-DD (UTC). Intradía: segundos UNIX. |
| data[].value | number | rates[to] / rates[from] |
| meta.kind | string | utc_daily | intraday |
{
"meta": {
"kind": "intraday",
"persistent_storage": false
},
"data": []
}Sin servicio de recopilación, 1D devuelve HTTP 200 y una lista vacía. No es un error ni datos por minuto. Las divisas inexistentes en el período histórico pueden fallar.
GET /api/rates/previous
Día UTC anterior
| Parámetro | Tipo | Obligatorio | Predeterminado | Descripción |
|---|---|---|---|---|
| from | string | Opcional | USD | De |
| to | string | Opcional | EUR | A |
curl --request GET 'https://lumeexchangerates.com/api/rates/previous?from=USD&to=EUR'Los valores y fechas ilustran la estructura; no son tipos actuales. Las listas pueden estar abreviadas. Usa el explorador API para obtener datos reales.
{
"meta": {
"kind": "utc_daily",
"reference_date": "2026-01-01",
"reference_timestamp": "2026-01-01T23:59:59Z"
},
"data": {
"from": "USD",
"to": "EUR",
"rate": 0.9,
"rates": {
"USD": 1,
"EUR": 0.9
}
}
}La comparación usa la referencia del día UTC anterior. reference_timestamp es el cierre lógico del día, no la publicación real. Variación porcentual: (actual − referencia) / referencia × 100.
POST /api/convert
Conversor
| Parámetro | Tipo | Obligatorio | Predeterminado | Descripción |
|---|---|---|---|---|
| Content-Type | header | Obligatorio | application/json | application/json |
| amount | number | Obligatorio | — | 0 ≤ amount ≤ 1e15; finite |
| from | string | Obligatorio | — | De |
| to | string | Obligatorio | — | A |
curl --request POST 'https://lumeexchangerates.com/api/convert' \
--header 'Content-Type: application/json' \
--data '{"amount":100,"from":"USD","to":"EUR"}'Los valores y fechas ilustran la estructura; no son tipos actuales. Las listas pueden estar abreviadas. Usa el explorador API para obtener datos reales.
{
"meta": {
"provider": "Proveedor externo de tipos de cambio",
"kind": "latest_published",
"provider_timestamp": 1767225600,
"published_at": "2026-01-01T00:00:00.000Z",
"expected_interval_seconds": 300,
"lag_seconds": 5,
"stale": false,
"timezone": "Asia/Seoul",
"fetched_at": "2026-01-01T00:00:05.000Z",
"persistent_storage": false
},
"data": {
"amount": 100,
"from": "USD",
"to": "EUR",
"rate": 0.9,
"result": 90
}
}Envía amount como número JSON; la cadena "100" devuelve 400. Los símbolos deben existir en la instantánea actual. La ruta calcula un valor; no ejecuta transferencias ni operaciones.
GET /v1/history
Consulta una fecha con /v1/history y un intervalo con /v1/series.
| Parámetro | Tipo | Obligatorio | Predeterminado | Descripción |
|---|---|---|---|---|
| date | YYYY-MM-DD | Obligatorio | — | 1999-01-01 ≤ date ≤ UTC today |
| anchor | string | Opcional | USD | De |
| targets | CSV | Opcional | all | A |
curl --request GET 'https://lumeexchangerates.com/v1/history?date=2026-01-01&anchor=EUR&targets=USD,JPY'Los valores y fechas ilustran la estructura; no son tipos actuales. Las listas pueden estar abreviadas. Usa el explorador API para obtener datos reales.
{
"meta": {
"date": "2026-01-01",
"published_at": "2026-01-01T23:00:00Z",
"partial_day": false
},
"anchor": "EUR",
"data": [
{
"currency": "USD",
"value": 1.1
}
]
}| Parámetro | Tipo | Descripción |
|---|---|---|
| meta.partial_day | boolean | Referencia diaria UTC |
| meta.published_at | ISO 8601 UTC | Último tipo publicado |
GET /v1/series
Consulta una fecha con /v1/history y un intervalo con /v1/series.
| Parámetro | Tipo | Obligatorio | Predeterminado | Descripción |
|---|---|---|---|---|
| start / end | YYYY-MM-DD | Obligatorio | — | 1999-01-01 ≤ start ≤ end < UTC today; ≤ 366 days inclusive |
| anchor / targets | string / CSV | Opcional | USD / all | same as /v1/quotes |
curl --request GET 'https://lumeexchangerates.com/v1/series?start=2026-01-01&end=2026-01-07&anchor=USD&targets=EUR'Los valores y fechas ilustran la estructura; no son tipos actuales. Las listas pueden estar abreviadas. Usa el explorador API para obtener datos reales.
{
"meta": {
"start": "2026-01-01",
"end": "2026-01-02",
"timezone": "UTC",
"count": 2
},
"anchor": "USD",
"data": [
{
"date": "2026-01-01",
"rates": [
{
"currency": "EUR",
"value": 0.9
}
]
},
{
"date": "2026-01-02",
"rates": [
{
"currency": "EUR",
"value": 0.91
}
]
}
]
}OHLC en /v1/candles requiere autorización del proveedor. Consulta /v1/capabilities; la disponibilidad depende del plan configurado.
{
"timezone": "UTC",
"date_bounds": "inclusive",
"max_days": 366,
"upstream_chunk": "calendar_month"
}GET /v1/candles
OHLC en /v1/candles requiere autorización del proveedor. Consulta /v1/capabilities; la disponibilidad depende del plan configurado.
| Parámetro | Tipo | Obligatorio | Predeterminado | Descripción |
|---|---|---|---|---|
| start | YYYY-MM-DDTHH:mm:00Z | Obligatorio | — | UTC; completed period only; ≥ 2016-12-19 |
| period | enum | Obligatorio | — | 1m | 5m | 15m | 30m | 1h | 12h | 1d | 1w | 1mo |
| anchor / targets | string / CSV | Opcional | USD / all | provider base / symbols |
curl --request GET 'https://lumeexchangerates.com/v1/candles?start=2026-01-01T00%3A00%3A00Z&period=1d&anchor=USD&targets=EUR'Los valores y fechas ilustran la estructura; no son tipos actuales. Las listas pueden estar abreviadas. Usa el explorador API para obtener datos reales.
{
"meta": {
"start": "2026-01-01T00:00:00Z",
"end": "2026-01-01T23:59:59Z",
"period": "1d"
},
"anchor": "USD",
"data": [
{
"currency": "EUR",
"open": 0.9,
"high": 0.92,
"low": 0.89,
"close": 0.91,
"average": 0.905
}
]
}{
"source": "provider_ohlc",
"synthetic": false,
"cross_rate_ohlc": false,
"max_age": {
"1m": "1h",
"5m": "24h",
"15m": "24h",
"30m": "32d",
"1h": "32d"
},
"alignment_minutes": {
"5m": 5,
"15m": 15,
"30m": 30,
"1h": 30,
"12h": 30,
"1d": 30
},
"calendar_alignment": {
"1w": "00:00 UTC",
"1mo": "YYYY-MM-01T00:00:00Z"
}
}GET /v1/capabilities
Disponibilidad
Parámetro: —
curl --request GET 'https://lumeexchangerates.com/v1/capabilities'Los valores y fechas ilustran la estructura; no son tipos actuales. Las listas pueden estar abreviadas. Usa el explorador API para obtener datos reales.
{
"data": {
"latest": true,
"currencies": true,
"conversion": "latest_snapshot",
"historical": "verified_on_request",
"time_series": true,
"ohlc": false,
"refresh_interval_seconds": 300,
"customer_api_keys": false
}
}OHLC en /v1/candles requiere autorización del proveedor. Consulta /v1/capabilities; la disponibilidad depende del plan configurado.
Datos y precisión
Los tipos son indicativos, no ofertas bancarias ni precios garantizados. La conversión usa una misma instantánea; redondea al mostrar o liquidar.
rate = rates[to] / rates[from]
result = amount * rateNo se truncan los tipos a decimales fijos. Redondea al mostrar o según tus criterios contables.
Todos los tipos usan una unidad de origen, incluido JPY. Multiplica por 100 solo al mostrarlo si lo necesitas. Considera el error binario de JavaScript y define reglas de decimales y redondeo para la liquidación.
Fechas y horas
Los tiempos UNIX son segundos UTC y los ISO usan Z. La fecha UTC diaria puede diferir de la local. La web muestra la zona horaria del navegador. meta.timezone es una indicación de visualización y no cambia el significado del timestamp.
| Parámetro | Tipo | Descripción |
|---|---|---|
| /v1 meta.as_of | ISO 8601 | YYYY-MM-DD | Fecha del proveedor |
| /v1 meta.refresh_interval_seconds | integer | Caché |
| /v1 meta.currency_count | integer | … divisas disponibles |
| /v1 meta.mode | provider | daily | Fuente de datos |
| /api meta.published_at | ISO 8601 UTC | Último tipo publicado |
| history data[].time | YYYY-MM-DD UTC | UNIX seconds | Referencia diaria UTC |
Errores
| HTTP | code | Descripción |
|---|---|---|
| 400 | INVALID_CURRENCY / INVALID_INPUT / INVALID_CONVERSION / INVALID_JSON / INVALID_PERIOD | Introduce un importe igual o mayor que cero |
| 405 | METHOD_NOT_ALLOWED | GET: /v1/*, /api/rates/*, /api/currencies; POST: /api/convert |
| 404 | NOT_FOUND | /api/rates/* |
| 422 | HISTORY_NOT_IN_PLAN / DATA_UNAVAILABLE | Disponibilidad |
| 429 | RATE_LIMITED | /api/* · 90 / IP / minute |
| 404 | NOT_FOUND | Unknown /v1 endpoint |
| 422 | FEATURE_NOT_IN_PLAN / HISTORY_NOT_IN_PLAN / OHLC_NOT_IN_PLAN | Disponibilidad |
| 400 | INVALID_DATE / INVALID_DATE_RANGE / INVALID_PERIOD / INCOMPLETE_PERIOD | Introduce un importe igual o mayor que cero |
| 503 | PROVIDER_UNAVAILABLE / DATA_UNAVAILABLE / SERVICE_UNAVAILABLE | No se pueden cargar los tipos. Inténtalo de nuevo más tarde. |
{
"error": {
"code": "INVALID_CURRENCY",
"message": "Symbol not available in latest provider data"
}
}message puede omitirse. Usa el estado HTTP y error.code. Corrige la entrada antes de reintentar; para 429 o 503 temporal usa retroceso exponencial limitado y aleatorizado. Retry-After no está garantizado.
Límites y caché
Los datos se almacenan en caché y la configuración actual apunta a cinco minutos. /api admite 90 solicitudes por minuto por IP; el límite directo es local a la instancia y Redis lo comparte. /v1 aún no aplica cuotas de futuros planes.
Las respuestas usan Cache-Control: no-store. La caché del navegador difiere de la del proveedor en el servidor. Reutiliza instantáneas por publicación. En una caída puede devolverse el último dato válido: comprueba stale o as_of. La caché directa de Worker no es persistente.
{
"endpoints": [
"/v1/history",
"/v1/series",
"/v1/candles",
"/v1/capabilities"
],
"requests_per_ip_per_minute": 60,
"cache": "in_process",
"completed_history_cache_seconds": 3600,
"current_day_cache_seconds": 60
}Disponibilidad
OHLC en /v1/candles requiere autorización del proveedor. Consulta /v1/capabilities; la disponibilidad depende del plan configurado.
OHLC en /v1/candles requiere autorización del proveedor. Consulta /v1/capabilities; la disponibilidad depende del plan configurado.
Explorador API
Llama a la API de este sitio. La clave del proveedor permanece en el servidor.
Ejecuta la petición para ver la respuesta JSON real.