API de RateExchanger
Tipos de cambio de más de 170 divisas frente a cualquier divisa base. Cada endpoint es una petición HTTPS GET normal que devuelve JSON, así que puedes llamarla desde cualquier lenguaje sin SDK.
Inicio rápido
- Consigue tu token de API. Todos los planes, incluido el gratuito, pueden usar la API.
- Envía una petición a
/exchangecon tu token en la cabeceraAuthorization. En un plan de pago, añade?base=EURpara expresar todos los tipos frente a otra divisa. - Lee los tipos del array
data. Cadarateindica cuánto de esa divisa compra una unidad debase.
Endpoints
| Endpoint | Devuelve | Token |
|---|---|---|
GET /exchange | Los tipos actuales de todas las divisas frente a una divisa base. | Obligatorio |
GET /convert | Una cantidad convertida de una moneda a otra. | Obligatorio |
GET /collection | Tus colecciones de divisas guardadas, con sus tipos. | Obligatorio |
GET /collection/{id} | Una de tus colecciones. | Obligatorio |
GET /currency | Las divisas disponibles, paginadas con page y per_page. | Obligatorio |
GET /country | Los países disponibles, paginados con page y per_page. | Obligatorio |
curl "https://rateexchanger.io/api/exchange" \ -H "Authorization: Bearer $RATEX_API_TOKEN"
const response = await fetch("https://rateexchanger.io/api/exchange", {
headers: { Authorization: `Bearer ${process.env.RATEX_API_TOKEN}` },
});
const { base, data } = await response.json();
const euro = data.find((item) => item.currency.code === "EUR");
console.log(euro.rate); // 0.896555
import os
import requests
response = requests.get(
"https://rateexchanger.io/api/exchange",
headers={"Authorization": f"Bearer {os.environ['RATEX_API_TOKEN']}"},
)
rates = {item["currency"]["code"]: item["rate"] for item in response.json()["data"]}
print(rates["EUR"]) # 0.896555
{
"base": "USD",
"data": [
{
"id": "01a131b5-0c2e-7d4f-9b1a-3e8f6a2c4d71",
"currency": {
"id": "01a131b4-9ad1-7a3e-8c55-1f2b3c4d5e6f",
"name": "Euro",
"code": "EUR"
},
"rate": 0.896555,
"updated_at": "2026-10-12T16:01:26.000000Z"
},
{
"id": "01a131b5-0c2f-71b8-a6d2-7c9e0f1a2b3c",
"currency": {
"id": "01a131b4-9ad3-7e10-b2c4-5d6e7f8a9b0c",
"name": "British Pound Sterling",
"code": "GBP"
},
"rate": 0.757241,
"updated_at": "2026-10-12T16:01:26.000000Z"
}
]
}
Primeros pasos
Autenticación
Envía tu token de API como token bearer en la cabecera Authorization. Una petición sin token o con un token no válido recibe 401 con el mensaje Unauthenticated.
Tu token identifica tu cuenta, así que cada petición se comprueba frente a tu suscripción y tu cupo de solicitudes. Los tokens no caducan; siguen siendo válidos hasta que se revocan.
No hace falta enviar la cabecera Accept. La API siempre responde en JSON, también en los errores.
curl "https://rateexchanger.io/api/exchange" \ -H "Authorization: Bearer $RATEX_API_TOKEN"
const response = await fetch("https://rateexchanger.io/api/exchange", {
headers: { Authorization: `Bearer ${process.env.RATEX_API_TOKEN}` },
});
import os
import requests
response = requests.get(
"https://rateexchanger.io/api/exchange",
headers={"Authorization": f"Bearer {os.environ['RATEX_API_TOKEN']}"},
)
{
"message": "Unauthenticated."
}
Primeros pasos
Límites de uso
Cada plan incluye un número fijo de solicitudes al mes, y cada petición a cualquier endpoint cuenta para ese límite, incluidas las que fallan con un error como 404 o 422. Las peticiones rechazadas porque tu plan está agotado o tu suscripción ha caducado no cuentan. Todos los planes reciben los mismos tipos, actualizados cada 30 minutos.
| Plan | Solicitudes incluidas | Actualización de tipos |
|---|---|---|
| Gratis | 500 | Cada 30 minutos |
| Básico | 20,000 | Cada 30 minutos |
| Pro | 700,000 | Cada 30 minutos |
| Elite | 1,800,000 | Cada 30 minutos |
Cuando llegas al límite
Cuando se agotan las solicitudes de tu plan, todos los endpoints devuelven 429 hasta que empiece tu siguiente cupo mensual o mejores tu plan. Si tu suscripción caduca, todos los endpoints devuelven 403.
Cada cuenta puede enviar además hasta 50 solicitudes por segundo, compartidas entre todas sus claves. Si vas más rápido, recibes 429 con una cabecera Retry-After, y esas solicitudes no cuentan para tu plan. Cada respuesta incluye las cabeceras X-RateLimit-Limit y X-RateLimit-Remaining, y tu panel muestra cuántas solicitudes has usado este mes.
{
"success": false,
"error": "You have used up the allowed API requests (500) within your plan!",
"code": 429
}
Primeros pasos
Errores
Las peticiones fallidas devuelven un código de estado HTTP estándar con un cuerpo JSON. Los errores 401, 422 y 500 incluyen un message; los parámetros no válidos además se detallan en errors, agrupados por nombre de parámetro.
Los errores 403, 404 y 429 tienen otro formato: success es false, el motivo está en error y code repite el código de estado. Comprueba primero el código HTTP y luego lee el campo que esté presente.
| Estado | Qué ha pasado |
|---|---|
| 401 | Falta el token o no es válido. |
| 403 | Tu correo aún no está verificado, tu suscripción ha caducado, tu plan no incluye la función que has pedido (colecciones, una divisa base personalizada o la conversión de moneda) o has pedido una colección que no es tuya. |
| 404 | La colección o el endpoint no existe. |
| 422 | Un parámetro no es válido, como una divisa base no admitida o un page no numérico. |
| 429 | Estás enviando más de 50 solicitudes por segundo (espera los segundos de Retry-After) o se han agotado las solicitudes de tu plan (se renuevan cuando empieza tu siguiente cupo mensual, o puedes mejorar tu plan). |
| 500 | Algo ha fallado por nuestra parte. Vuelve a intentarlo en unos momentos. |
curl "https://rateexchanger.io/api/exchange?base=XYZ" \ -H "Authorization: Bearer $RATEX_API_TOKEN"
{
"message": "Invalid base currency.",
"errors": {
"base": [
"Invalid base currency."
]
}
}
Endpoints
Tipos de cambio
Devuelve el tipo actual de cada divisa disponible frente a una divisa base, actualizado cada 30 minutos. La propia divisa base no se incluye en data.
Cada rate indica cuánto de esa divisa compra una unidad de base, y updated_at indica cuándo se actualizó por última vez. Los tipos frente a una base personalizada se convierten a partir de los tipos en USD y no se redondean.
Parámetros de consulta
-
base string opcional
Solo en planes de pago. Código de tres letras frente al que se expresan los tipos, como
EUR. Por defecto,USD. En el plan gratuito, enviarbase, aunque seaUSD, devuelve403. Un código no admitido devuelve422.
curl "https://rateexchanger.io/api/exchange" \ -H "Authorization: Bearer $RATEX_API_TOKEN"
const response = await fetch("https://rateexchanger.io/api/exchange", {
headers: { Authorization: `Bearer ${process.env.RATEX_API_TOKEN}` },
});
const { data } = await response.json();
import os
import requests
response = requests.get(
"https://rateexchanger.io/api/exchange",
headers={"Authorization": f"Bearer {os.environ['RATEX_API_TOKEN']}"},
)
data = response.json()["data"]
{
"base": "USD",
"data": [
{
"id": "01a131b5-0c2e-7d4f-9b1a-3e8f6a2c4d71",
"currency": {
"id": "01a131b4-9ad1-7a3e-8c55-1f2b3c4d5e6f",
"name": "Euro",
"code": "EUR"
},
"rate": 0.896555,
"updated_at": "2026-10-12T16:01:26.000000Z"
},
{
"id": "01a131b5-0c2f-71b8-a6d2-7c9e0f1a2b3c",
"currency": {
"id": "01a131b4-9ad3-7e10-b2c4-5d6e7f8a9b0c",
"name": "British Pound Sterling",
"code": "GBP"
},
"rate": 0.757241,
"updated_at": "2026-10-12T16:01:26.000000Z"
}
]
}
Endpoints
Convertir moneda
Convierte una cantidad de una moneda a otra al tipo de cambio actual, que se actualiza cada 30 minutos, para que no tengas que hacer las cuentas tú.
rate es cuánto de to compra una unidad de from, redondeado a 6 decimales, y result es amount convertido, también redondeado a 6 decimales. updated_at es cuándo se actualizó por última vez el más antiguo de los dos tipos, y es null cuando ambos lados son USD.
403 con el error Your plan does not include currency conversion!Parámetros de consulta
-
from string obligatorio
Código de tres letras de la moneda de origen, como
EUR. Da igual si va en mayúsculas o minúsculas. Un código no admitido devuelve422. -
to string obligatorio
Código de tres letras de la moneda de destino, como
GBP. -
amount number obligatorio
Cantidad que quieres convertir, mayor que 0, como
99o12.50. -
collection string opcional
Solo planes de pago. El
idde una de tus colecciones, para añadir su porcentaje demarkupal tipo, igual que se aplica a los tipos de la colección. Una colección que no es tuya devuelve403.
curl "https://rateexchanger.io/api/convert?from=EUR&to=GBP&amount=99" \ -H "Authorization: Bearer $RATEX_API_TOKEN"
const response = await fetch("https://rateexchanger.io/api/convert?from=EUR&to=GBP&amount=99", {
headers: { Authorization: `Bearer ${process.env.RATEX_API_TOKEN}` },
});
const { data } = await response.json();
import os
import requests
response = requests.get(
"https://rateexchanger.io/api/convert",
params={"from": "EUR", "to": "GBP", "amount": 99},
headers={"Authorization": f"Bearer {os.environ['RATEX_API_TOKEN']}"},
)
data = response.json()["data"]
{
"data": {
"from": {
"id": "01a131b4-9ad1-7a3e-8c55-1f2b3c4d5e6f",
"name": "Euro",
"code": "EUR"
},
"to": {
"id": "01a131b4-9ad3-7e10-b2c4-5d6e7f8a9b0c",
"name": "British Pound Sterling",
"code": "GBP"
},
"amount": 99,
"rate": 0.844612,
"markup": 0,
"collection": null,
"result": 83.616576,
"updated_at": "2026-10-12T16:01:26.000000Z"
}
}
Endpoints
Listar colecciones
Devuelve todas las colecciones de divisas guardadas en tu cuenta, cada una con su nombre, su divisa base, su markup y el último tipo de las divisas que contiene. Usa las colecciones para obtener solo las divisas que te interesan en una sola llamada.
El rate de cada elemento indica cuánto de esa divisa compra una unidad de la base de la colección, con el porcentaje de markup de la colección añadido. Los tipos se redondean a 6 decimales. El updated_at de un elemento indica cuándo se actualizó su tipo por última vez, y es null para el USD, la divisa frente a la que se guardan todos los tipos.
403 con el error Your plan does not include API collections!Parámetros de consulta
Ninguno. Todas tus colecciones se devuelven en una sola respuesta.
curl "https://rateexchanger.io/api/collection" \ -H "Authorization: Bearer $RATEX_API_TOKEN"
const response = await fetch("https://rateexchanger.io/api/collection", {
headers: { Authorization: `Bearer ${process.env.RATEX_API_TOKEN}` },
});
const { data } = await response.json();
import os
import requests
response = requests.get(
"https://rateexchanger.io/api/collection",
headers={"Authorization": f"Bearer {os.environ['RATEX_API_TOKEN']}"},
)
data = response.json()["data"]
{
"data": [
{
"id": "01a2f7c3-4b5d-7e6f-8a9b-0c1d2e3f4a5b",
"name": "Checkout currencies",
"base": {
"id": "01a131b4-9b52-7c1d-a3e4-6f7a8b9c0d1e",
"name": "United States Dollar",
"code": "USD"
},
"markup": 0,
"items": [
{
"id": "01a2f7c3-5c6d-7e8f-9a0b-1c2d3e4f5a6b",
"currency": {
"id": "01a131b4-9ad1-7a3e-8c55-1f2b3c4d5e6f",
"name": "Euro",
"code": "EUR"
},
"rate": 0.896555,
"updated_at": "2026-10-12T16:01:26.000000Z"
},
{
"id": "01a2f7c3-5c6e-7f90-a1b2-c3d4e5f6a7b8",
"currency": {
"id": "01a131b4-9ad3-7e10-b2c4-5d6e7f8a9b0c",
"name": "British Pound Sterling",
"code": "GBP"
},
"rate": 0.757241,
"updated_at": "2026-10-12T16:01:26.000000Z"
}
],
"created_at": "2026-09-02T14:22:10.000000Z",
"updated_at": "2026-09-02T14:22:10.000000Z"
}
]
}
Endpoints
Obtener una colección
Devuelve una de tus colecciones con el último tipo de cada divisa que contiene. La respuesta tiene los mismos campos que un elemento de Listar colecciones.
Parámetros de ruta
-
id string obligatorio
El
idde la colección. Una colección de otra cuenta devuelve403; una que no existe devuelve404.
curl "https://rateexchanger.io/api/collection/01a2f7c3-4b5d-7e6f-8a9b-0c1d2e3f4a5b" \ -H "Authorization: Bearer $RATEX_API_TOKEN"
const response = await fetch("https://rateexchanger.io/api/collection/01a2f7c3-4b5d-7e6f-8a9b-0c1d2e3f4a5b", {
headers: { Authorization: `Bearer ${process.env.RATEX_API_TOKEN}` },
});
const { data } = await response.json();
import os
import requests
response = requests.get(
"https://rateexchanger.io/api/collection/01a2f7c3-4b5d-7e6f-8a9b-0c1d2e3f4a5b",
headers={"Authorization": f"Bearer {os.environ['RATEX_API_TOKEN']}"},
)
data = response.json()["data"]
{
"data": {
"id": "01a2f7c3-4b5d-7e6f-8a9b-0c1d2e3f4a5b",
"name": "Checkout currencies",
"base": {
"id": "01a131b4-9b52-7c1d-a3e4-6f7a8b9c0d1e",
"name": "United States Dollar",
"code": "USD"
},
"markup": 0,
"items": [
{
"id": "01a2f7c3-5c6d-7e8f-9a0b-1c2d3e4f5a6b",
"currency": {
"id": "01a131b4-9ad1-7a3e-8c55-1f2b3c4d5e6f",
"name": "Euro",
"code": "EUR"
},
"rate": 0.896555,
"updated_at": "2026-10-12T16:01:26.000000Z"
},
{
"id": "01a2f7c3-5c6e-7f90-a1b2-c3d4e5f6a7b8",
"currency": {
"id": "01a131b4-9ad3-7e10-b2c4-5d6e7f8a9b0c",
"name": "British Pound Sterling",
"code": "GBP"
},
"rate": 0.757241,
"updated_at": "2026-10-12T16:01:26.000000Z"
}
],
"created_at": "2026-09-02T14:22:10.000000Z",
"updated_at": "2026-09-02T14:22:10.000000Z"
}
}
Endpoints
Divisas
Lista todas las divisas disponibles con su nombre y su código ISO 4217 de tres letras. Usa estos códigos en el parámetro base.
Parámetros de consulta
-
per_page number opcional
Resultados por página. Por defecto,
25. Usa-1para obtener todas las divisas en una sola respuesta, sin paginación. -
page number opcional
Página que se devuelve. Por defecto,
1.
Las respuestas paginadas también incluyen links (URLs de la primera, última, anterior y siguiente página) y meta (página actual, total, etc.).
curl "https://rateexchanger.io/api/currency?per_page=2" \ -H "Authorization: Bearer $RATEX_API_TOKEN"
const response = await fetch("https://rateexchanger.io/api/currency?per_page=2", {
headers: { Authorization: `Bearer ${process.env.RATEX_API_TOKEN}` },
});
const { data } = await response.json();
import os
import requests
response = requests.get(
"https://rateexchanger.io/api/currency",
params={"per_page": 2},
headers={"Authorization": f"Bearer {os.environ['RATEX_API_TOKEN']}"},
)
data = response.json()["data"]
{
"data": [
{
"id": "01a131b4-9ac6-70cb-9522-fb389aa55357",
"name": "United Arab Emirates Dirham",
"code": "AED"
},
{
"id": "01a131b4-9ac7-724c-abaf-93bac978e922",
"name": "Afghan Afghani",
"code": "AFN"
}
],
"meta": {
"current_page": 1,
"last_page": 87,
"per_page": 2,
"total": 173
}
}
Endpoints
Países
Lista todos los países disponibles con su nombre, un slug apto para URLs y su código ISO 3166 de dos letras.
Parámetros de consulta
-
per_page number opcional
Resultados por página. Por defecto,
25. Usa-1para obtener todos los países en una sola respuesta, sin paginación. -
page number opcional
Página que se devuelve. Por defecto,
1.
curl "https://rateexchanger.io/api/country?per_page=2" \ -H "Authorization: Bearer $RATEX_API_TOKEN"
const response = await fetch("https://rateexchanger.io/api/country?per_page=2", {
headers: { Authorization: `Bearer ${process.env.RATEX_API_TOKEN}` },
});
const { data } = await response.json();
import os
import requests
response = requests.get(
"https://rateexchanger.io/api/country",
params={"per_page": 2},
headers={"Authorization": f"Bearer {os.environ['RATEX_API_TOKEN']}"},
)
data = response.json()["data"]
{
"data": [
{
"id": "01a131b4-9196-71ca-95ca-22bf8c422cce",
"name": "Afghanistan",
"slug": "afghanistan",
"code": "AF"
},
{
"id": "01a131b4-9197-7036-bcfe-b9a41f75a308",
"name": "Albania",
"slug": "albania",
"code": "AL"
}
],
"meta": {
"current_page": 1,
"last_page": 99,
"per_page": 2,
"total": 198
}
}