Tutorial/Inicio rápido con Python

Cómo obtener tipos de cambio en Python

Lee tipos de cambio en vivo e históricos en Python con unas pocas líneas. Sin clave para empezar, 10,000 llamadas al mes al registrarte, y cada respuesta te dice cómo de fresco es el tipo.

ERexchangerate.dev·Jun 19, 2026·5 min de lectura

El camino más corto a los tipos de cambio en Python es una petición GET a /v1/latest/USD. Recibes JSON con tipos para 31 monedas más dos campos de frescura, source y market_session. Tu primera llamada no necesita clave de API.

Key points
Un GET a /v1/latest/{base} devuelve tipos para 31 monedas en JSON.
Cada respuesta lleva source y market_session, así que sabes cómo de fresco es cada tipo.
El plan gratuito son 10,000 llamadas al mes a 12 peticiones por minuto, sin tarjeta.
Los tipos son indicativos, publicados para referencia y análisis, no como cotización en firme.

Tu primera llamada, sin dependencias

No necesitas nada fuera de la biblioteca estándar. urllib.request resuelve una llamada suelta:

python · standard librarycopy
import json
import urllib.request

url = "https://api.exchangerate.dev/v1/latest/USD"
with urllib.request.urlopen(url) as resp:
    data = json.load(resp)

print(data["rates"]["EUR"])     # 0.87531
print(data["source"])            # ecb_daily
print(data["market_session"])    # open

Eso corre sin clave. Las llamadas anónimas tienen tope por dirección IP, así que para cualquier cosa más allá de una prueba rápida quieres una clave gratuita.

Con requests y una clave de API

La mayoría de proyectos ya usan requests. Pasa la clave como token bearer:

python · requestscopy
import requests

API = "https://api.exchangerate.dev/v1"
KEY = "exr_live_..."   # free key at https://exchangerate.dev/signup

resp = requests.get(
    f"{API}/latest/USD",
    headers={"Authorization": f"Bearer {KEY}"},
    timeout=10,
)
resp.raise_for_status()
data = resp.json()

print(data["rates"]["GBP"], data["market_session"])

Una clave gratuita sube tu límite a 10,000 llamadas al mes a 12 peticiones por minuto. La cabecera X-API-Key también funciona, para plataformas que no pueden fijar Authorization.

Convierte un importe

Para convertir en vez de listar tipos, llama a /v1/convert. Devuelve el tipo y el importe convertido juntos:

python · convert 100 USD to EURcopy
r = requests.get(
    f"{API}/convert/USD/EUR/100",
    headers={"Authorization": f"Bearer {KEY}"},
).json()

print(r["rate"])         # 0.87572
print(r["converted"])    # 87.57

Sabe cómo de fresco es un tipo

Dos campos en cada respuesta te dicen qué estás mirando. source es la clase de dato: live para spot agregado, ecb_daily para el fix de referencia del Banco Central Europeo, fred_daily para la serie diaria de la Reserva Federal. market_session es open, weekend, o interbank_closed para un cierre conocido fuera de fin de semana.

Valor del campoQué significaCuándo se mueve
source: liveConsenso spot agregadoIntradía (~60 s), semana de negociación
source: ecb_dailyFix de referencia oficialUna vez por día hábil
market_session: weekendSábado o domingo (interbancario cerrado)El fix de referencia arrastra el valor del viernes; el feed en vivo no se actualiza
Indicativos, no para liquidación
Los tipos se publican para referencia, análisis y visualización. No son una cotización en firme y no deben usarse para liquidar una operación. Cada respuesta lo lleva en su campo notice.

Lee un día pasado concreto

Pide cualquier fecha hasta 1999 poniéndola en la ruta. La respuesta añade is_forward_filled, que es true cuando ese día no se publicó tipo, como un fin de semana o un festivo:

python · rate on a past datecopy
r = requests.get(
    f"{API}/2026-03-14/USD",
    headers={"Authorization": f"Bearer {KEY}"},
).json()

print(r["rates"]["JPY"], r["is_forward_filled"])

Para una serie completa entre dos fechas en una sola llamada, usa /v1/range con start_date y end_date. Hay una guía aparte que lo cubre.

ER
exchangerate.dev
Guías de integración para desarrolladores.

Keep reading

TutorialConversión de divisas en JavaScript y Node.jsRead GuideTipos históricos y series temporales en una llamadaRead ReferenceCómo leer source y market_sessionRead
Más ComparacionesFixer vs exchangerate.devOpen Exchange Rates vs exchangerate.devCurrencylayer vs exchangerate.dev
AprenderReading source and market_session in your pipelineIndicative vs executable FX rates: what a rates API actually gives youECB reference rates, explained
Tasas en VivoEUR/USDGBP/USDUSD/JPY