Volver al blog

Wise Exchange Rate API: cómo obtener los tipos de Wise y cuándo necesitas una alternativa

V
Vlado Grigirov
September 04, 2026
Currency API Exchange Rates Wise API Comparison Fintech Developer Guide

Si alguna vez has intentado mostrar el tipo de cambio de Wise dentro de tu propio producto, probablemente hayas descubierto que la API de tipos de cambio de Wise no es exactamente lo que esperabas. Wise publica datos de tipo medio de mercado realmente excelentes y los expone a través de un endpoint REST, pero está detrás de un proceso de aprobación de socios, vive dentro de una API de pagos en lugar de una API de datos de mercado, y el tipo que recibes deliberadamente no es el precio que pagará tu usuario.

Esta guía cubre exactamente qué expone Wise, cómo autenticarse, qué devuelve cada endpoint y los cinco límites estructurales que determinan si Wise es la fuente adecuada para tu proyecto. También responde con honestidad a la pregunta que la mayoría se hace en realidad: si solo necesitas tipos de cambio medios fiables en una aplicación, ¿es Wise la herramienta para ese trabajo?

Qué es realmente la API de tipos de cambio de Wise

Wise es una empresa de transferencias de dinero. Su API —con la marca Wise Platform— está construida para mover dinero: crear cotizaciones, registrar destinatarios, financiar transferencias, conciliar saldos, emitir tarjetas. Los tipos de cambio aparecen en esa API porque no se puede fijar el precio de una transferencia sin ellos, no porque Wise venda datos de mercado.

Ese enfoque explica casi todas las sorpresas con las que se topan los desarrolladores. Los tipos son un módulo pequeño dentro de una plataforma de pagos, y están limitados a las rutas de divisas que Wise realmente soporta.

Tres superficies distintas, tres vías de acceso diferentes

La mayor fuente de confusión es que «la API de tipos de Wise» se refiere al menos a tres cosas distintas:

  1. GET /rates — el endpoint de tipos de cambio. Devuelve el tipo medio de mercado de Wise para un par de divisas, actual o histórico. Esto es lo que la mayoría tiene en mente.
  2. POST /quotes — el endpoint de cotizaciones. Devuelve una transferencia con precio: tipo, comisión, tiempo estimado de entrega y una marca de caducidad del tipo.
  3. GET /comparisons — el endpoint de comparación. Devuelve estimaciones de precio y velocidad de Wise y de proveedores y bancos competidores en una ruta determinada.

Están documentados en la misma referencia, usan esquemas de autenticación diferentes y responden a preguntas muy distintas. Elegir el equivocado es la causa habitual del «¿por qué este tipo es distinto del que veo en wise.com?».

Cómo obtener acceso a los datos de tipos de Wise

No hay clave de API autoservicio. El acceso se divide en dos vías:

Socios de plataforma. Te incorporas como socio de Wise Platform y te autenticas con OAuth 2.0 (client ID y client secret) para obtener un token. La referencia de /rates indica que el endpoint «solo admite autenticación Bearer para socios no afiliados», mediante un User Token o Personal Token.

Socios afiliados. Te unes al programa de afiliados de Wise y luego escribes a partnerwise@wise.com para solicitar credenciales. Wise revisa la solicitud y, si la aprueba, emite credenciales Basic auth que desbloquean exactamente dos endpoints: Exchange Rates List y Get Temporary Quote. Nada más.

Aquí está la bifurcación. Si construyes un comparador, un widget para un blog de viajes o una página de marketing fintech, la vía de afiliados está diseñada para ti. Si construyes una función de producto —precios multidivisa, facturación, una pantalla de conversión, un informe interno— estás pidiendo a un equipo de alianzas de pagos que te apruebe para obtener datos de mercado, que no es lo que ninguna de las dos partes quiere de esa relación.

Ten en cuenta además que Wise fija la versión de la API en la ruta de la URL: producción es https://api.wise.com/2026Q3/rates, con sandbox en https://api.wise-sandbox.com/2026Q3/rates. La documentación heredada de afiliados aún referencia /v1/rates en api.transferwise.com. Las versiones incrustadas en rutas significan que tu integración envejece en silencio salvo que alguien se responsabilice de actualizarla.

Llamar al endpoint de tipos de Wise

Una vez que tienes un token, el endpoint es limpio y está bien diseñado. Se documentan cuatro formas de llamada:

# Latest rates for every supported currency
curl -X GET 'https://api.wise.com/2026Q3/rates' \
  -H 'Authorization: Bearer <YOUR_TOKEN>'

# Latest rate for a single pair
curl -X GET 'https://api.wise.com/2026Q3/rates?source=EUR&target=USD' \
  -H 'Authorization: Bearer <YOUR_TOKEN>'

# Rate at a specific historical moment
curl -X GET 'https://api.wise.com/2026Q3/rates?source=EUR&target=USD&time=2019-02-13T14:53:01' \
  -H 'Authorization: Bearer <YOUR_TOKEN>'

# A time series, grouped by day, hour or minute
curl -X GET 'https://api.wise.com/2026Q3/rates?source=EUR&target=USD&from=2019-02-13&to=2019-03-13&group=day' \
  -H 'Authorization: Bearer <YOUR_TOKEN>'

La respuesta es un array, un objeto por intervalo:

[
  {
    "rate": 1.166,
    "source": "EUR",
    "target": "USD",
    "time": "2018-08-31T10:43:31+0000"
  }
]

Dos detalles a destacar. Primero, group acepta day, hour o minute — el histórico a nivel de minuto es inusualmente generoso y realmente útil para backtesting. Segundo, la respuesta es siempre un array, incluso para un solo par, así que parsea en consecuencia:

import requests

TOKEN = "<YOUR_TOKEN>"
BASE = "https://api.wise.com/2026Q3"

def wise_rate(source: str, target: str) -> float:
    r = requests.get(
        f"{BASE}/rates",
        params={"source": source, "target": target},
        headers={"Authorization": f"Bearer {TOKEN}"},
        timeout=10,
    )
    r.raise_for_status()
    payload = r.json()
    if not payload:
        raise LookupError(f"No rate returned for {source}/{target}")
    return payload[0]["rate"]  # array, even for one pair

print(wise_rate("EUR", "USD"))

Otra trampa, bien documentada en la práctica: si envías time y from/to en la misma petición, los parámetros de rango ganan y time se ignora. Esto provocó un error persistente en el nodo Wise de n8n que requirió un parche upstream. Envía uno u otro, nunca ambos.

El tipo medio de mercado no es el precio que paga tu usuario

El endpoint /rates de Wise devuelve el tipo medio de mercado: el punto medio entre el precio de compra y el de venta en el mercado interbancario. Es el tipo «real», y es aquello sobre lo que Wise construye su marketing. También es, por definición, un tipo al que nadie transacciona.

Si necesitas saber lo que costará realmente una transferencia, necesitas /quotes:

curl -X POST 'https://api.wise.com/2026Q3/quotes' \
  -H 'Authorization: Bearer <YOUR_TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{
    "sourceCurrency": "GBP",
    "targetCurrency": "USD",
    "sourceAmount": 100
  }'

La respuesta de cotización trae los campos que la lógica de precios necesita de verdad: rate, rateType (por ejemplo FIXED), rateExpirationTime, un desglose de fee, feePercentage y un array paymentOptions con estimatedDelivery por método de pago. También devuelve notices — el propio ejemplo documentado de Wise advierte de que un cliente puede tener un máximo de tres transferencias abiertas con tipo garantizado antes de que las siguientes pasen al tipo en vivo.

La consecuencia práctica: una cotización es un objeto efímero y con estado ligado a una transferencia, no una consulta de tipo que puedas sondear periódicamente. Si tu caso de uso es «mostrar el precio en USD de hoy en una página de precios», las cotizaciones son la primitiva equivocada y los tipos la correcta. Si tu caso de uso es «decir al usuario exactamente cuánto recibirá», los tipos por sí solos lo sobrestimarán. Confundir esta distinción es una fuente habitual de los desajustes de redondeo y conciliación descritos en nuestra guía sobre redondeo de divisas y decimales.

Qué devuelve realmente la API de comparación

El endpoint de comparación es la parte más interesante y peor entendida de la plataforma. Devuelve estimaciones de precio y velocidad, proveedor por proveedor, para bancos y servicios de transferencia en una ruta:

curl -X GET 'https://api.wise.com/2026Q3/comparisons?sourceCurrency=GBP&targetCurrency=EUR&sendAmount=10000&filter=POPULAR'

Antes de construir nada encima, lee con atención la nota metodológica de Wise. Wise indica que recopila tipos y comisiones anunciados en sitios web de terceros, calcula el margen de cada proveedor sobre el tipo medio de mercado en el momento de la recopilación y después vuelve a aplicar ese margen almacenado al tipo medio actual para producir el número que recibes. La recopilación se ejecuta aproximadamente una vez por hora.

Dicho de otro modo: los precios de la competencia que ofrece este endpoint son estimaciones modeladas derivadas de extracciones horarias, no cotizaciones en vivo. Wise lo dice con claridad, lo cual le honra, pero significa que el dato no sirve para nada donde tuvieras que responder por la cifra del competidor. Wise además limita las estimaciones a entradas y salidas por transferencia bancaria únicamente, y señala que muchos proveedores fijan precios muy distintos para tarjeta y efectivo.

Estructuralmente, la respuesta está desnormalizada: un mismo proveedor puede devolver varias cotizaciones para el mismo par de divisas porque el precio y la velocidad varían según el país de destino. Recibes un array providers, cada uno con su array quotes, y reducir eso a una cifra destacada por proveedor es tarea tuya, no de la API.

Cinco límites que conviene conocer antes de construir sobre los tipos de Wise

  1. El acceso es una relación comercial, no un registro. La aprobación como afiliado o la incorporación a Platform condicionan cada llamada. No hay un panel donde generes una clave en treinta segundos.
  2. La cobertura sigue a las rutas de transferencia. Wise soporta las divisas con las que puede mover dinero. Un proveedor de datos dedicado cubre las divisas que puede valorar, un conjunto más amplio — Finexly cubre más de 170 divisas, incluidas algunas para las que no existe corredor de transferencia.
  3. Los tipos son un módulo dentro de una API de pagos. Alrededor hay cotizaciones, destinatarios, KYC, tarjetas y webhooks. Es una integración grande y sensible en seguridad para mantener cuando lo único que querías era un número.
  4. Sin cuota publicada. La referencia de /rates documenta una respuesta 429 pero no publica un límite de peticiones, así que dimensionas capacidad contra un límite no declarado. Compáralo con un modelo explícito, con cabeceras en cada respuesta.
  5. Dos divisas por llamada. /rates acepta un único source y target. Fijar precios en ocho divisas implica ocho llamadas o descargar la tabla completa y filtrar en cliente.

Ninguno de estos puntos es un defecto. Es el aspecto que tiene una API de pagos cuando la usas como API de datos.

Cuándo Wise es la elección correcta y cuándo no

Tu caso de usoMejor opciónPor qué
Comparador o contenido de afiliación «bancos vs Wise»API de comparación de WiseEs la única fuente de ese dato, y la vía de afiliados existe justo para eso
Enviar dinero realmente a través de WiseQuotes + Transfers de WiseNecesitas el objeto de cotización con precio y caducidad
Mostrar el tipo de marca Wise porque tus usuarios lo piden/rates de WiseLa atribución de marca es todo el objetivo
Precios multidivisa, checkout o pantalla de conversiónAPI de divisas dedicadaNecesitas amplitud, clave inmediata y un contrato simple
Facturación, cobros e informes de ingresosAPI de divisas dedicadaNecesitas una serie histórica estable y una traza auditable
Backtesting o analíticaCualquieraEl histórico por minuto de Wise es potente; una API de datos es más fácil de obtener
Si encajas en las tres primeras filas, usa Wise. Es la herramienta correcta y este artículo no va a fingir lo contrario. Si encajas en las últimas, estás pagando el coste de una incorporación de socios por una consulta, y una API de tipos de cambio construida a propósito es el camino más corto. El mismo razonamiento aplica a usar los endpoints FX de una pasarela de pago como fuente de datos, algo que abordamos en API de Stripe FX Quotes frente a una API de divisas dedicada.

Usar en su lugar una API de tipos de cambio dedicada

Una API de datos invierte el equilibrio: sin llamada de incorporación, mayor cobertura, cuota explícita y una respuesta que no contiene más que el tipo.

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.finexly.com/v1/rate?from=EUR&to=USD"
{ "pair": "EUR_USD", "rate": 1.0852 }

Fijar precios en varias divisas es un solo viaje de ida y vuelta en lugar de una llamada por par:

const apiKey = process.env.FINEXLY_API_KEY;

async function priceTable(base, quotes) {
  const q = quotes.map((c) => `${base}_${c}`).join(',');
  const res = await fetch(`https://api.finexly.com/v1/convert?q=${q}`, {
    headers: { Authorization: `Bearer ${apiKey}` },
  });
  if (!res.ok) throw new Error(`Finexly ${res.status}`);
  return res.json();
}

const rates = await priceTable('USD', ['EUR', 'GBP', 'JPY', 'CAD', 'AUD']);
// { "USD_EUR": { "rate": 0.9215 }, "USD_GBP": { "rate": 0.7892 }, ... }

Y cuando quieras la cifra convertida en lugar del multiplicador, deja que la API haga la aritmética para que el redondeo ocurra en un único sitio:

import requests

def convert(amount, src, dst, api_key):
    r = requests.get(
        "https://api.finexly.com/v1/convert-amount",
        params={"from": src, "to": dst, "amount": amount},
        headers={"Authorization": f"Bearer {api_key}"},
        timeout=10,
    )
    r.raise_for_status()
    return r.json()["result"]

print(convert(100, "USD", "EUR", "YOUR_API_KEY"))

Cada respuesta incluye X-RateLimit-Limit, X-RateLimit-Used y X-RateLimit-Units, de modo que la cuota es observable y no inferida. Los tipos se actualizan cada minuto durante el horario de mercado. El plan gratuito ofrece 1.000 peticiones al mes a 10 peticiones por minuto, y los planes de pago empiezan en 6,99 $/mes por 3.500 peticiones hasta 100.000 en el plan Professional — el desglose completo está en la página de precios.

Una nota breve sobre volumen: 1.000 peticiones al mes suena a poco hasta que cacheas. Un solo job programado que refresque toda la tabla de tipos cada quince minutos consume unas 2.900 llamadas al mes; cada sesenta minutos, unas 730. La caché convierte tu volumen de llamadas en función del tiempo y no del tráfico, que es lo que hace viable un plan pequeño a cualquier escala. Los patrones están en caché y manejo de errores para APIs de divisas.

Migrar desde /rates de Wise

Si estás moviendo una integración existente, la correspondencia es casi uno a uno:

WiseEquivalenteNota
GET /ratesGET /v1/currencies y luego /v1/rateEl /rates sin parámetros devuelve todo; obtén la lista de divisas una vez
GET /rates?source=X&target=YGET /v1/rate?from=X&to=YDevuelve un objeto, no un array de un elemento
Varios pares, varias llamadasGET /v1/convert?q=X_Y,X_ZUna sola petición
amount * rate manualGET /v1/convert-amountRedondeo resuelto en servidor
?time= punto históricoEndpoint históricoRequiere plan de pago; ver la guía de tipos históricos
Token Basic u OAuthAuthorization: BearerClave desde el panel, sin paso de aprobación
Lo único que no migra es la marca Wise. Si tu propuesta de valor es «te mostramos el tipo de Wise», solo Wise puede suministrarlo. Si tu propuesta es «nuestros precios son correctos en tu divisa», sirve cualquier fuente media de mercado precisa — y la cuestión del origen del dato merece entenderse igualmente, algo que desgranamos en de dónde obtienen sus datos las APIs de tipos de cambio.

Por último: no hagas scraping de wise.com. Varias fichas de marketplace ofrecen exactamente eso, y son frágiles, jurídicamente turbias y se rompen en cuanto cambia el marcado de la página. Si necesitas específicamente la cifra de Wise, toma la vía de afiliados y obtenla de la API como corresponde. Si necesitas una cifra, usa una API construida para servirla. Nuestra comparativa de APIs de divisas gratuitas y la guía de alternativas a Frankfurter cubren con más detalle las opciones sin clave.

Preguntas frecuentes

¿Es gratuita la API de tipos de cambio de Wise? No hay un coste por petición publicado para el endpoint de tipos, pero el acceso no es abierto. Debes ser socio aprobado de Wise Platform o socio afiliado aprobado, lo que implica una solicitud y una revisión en lugar de un formulario de registro. Para la mayoría de proyectos el coste es tiempo, no dinero.

¿Puedo usar la API de Wise sin cuenta? No. Ambas vías documentadas requieren credenciales: tokens Bearer para socios de plataforma, client ID y secret con Basic auth para afiliados. El único endpoint cuyo ejemplo documentado omite la cabecera de autorización es /comparisons, y construir tráfico de producción sobre esa suposición sería imprudente.

¿Devuelve la API de Wise el mismo tipo que muestra wise.com? /rates devuelve el tipo medio de mercado, que es la cifra destacada que anuncia Wise. El importe que recibe realmente el cliente sale de /quotes e incluye la comisión de Wise. Si tus números no cuadran con la web, casi con seguridad estás comparando un tipo medio con una cotización con precio.

¿Hasta dónde llega el histórico de tipos de Wise? El endpoint acepta marcas from/to arbitrarias con agrupación por day, hour o minute; Wise no publica una fecha mínima fija en la referencia, así que prueba el rango concreto que necesites en lugar de dar por hecha la cobertura.

¿Cuál es la mejor alternativa a la API de tipos de cambio de Wise? Depende de qué estés sustituyendo. Para comparar precios de la competencia no hay alternativa: la API de comparación de Wise es única. Para tipos medios de mercado dentro de un producto, una API de datos de divisas dedicada te da más cobertura, claves inmediatas y una cuota explícita. Compara las opciones en nuestra página de comparación de APIs.

¿Puedo mostrar legalmente el tipo de Wise a mis usuarios? Si eres afiliado o socio de plataforma aprobado, sí, dentro de los términos de ese acuerdo. Hacer scraping del sitio público para obtener las mismas cifras es otra cosa y no es algo sobre lo que recomendaríamos construir un negocio.


¿Listo para saltarte la incorporación de socios y simplemente obtener tipos? Consigue tu clave gratuita de la API de Finexly — sin tarjeta de crédito. Empieza con 1.000 peticiones gratuitas al mes en más de 170 divisas y amplía solo cuando lo haga tu tráfico. También puedes probar los tipos en el navegador con nuestro conversor de divisas.

Vlado Grigirov

Senior Currency Markets Analyst & Financial Strategist

Vlado Grigirov is a senior currency markets analyst and financial strategist with over 14 years of experience in foreign exchange markets, cross-border finance, and currency risk management. He has wo...

View full profile →