Documentación de la API
Todo lo que necesitás para integrar el tipo de cambio de Costa Rica en tus aplicaciones.
Introducción
La API de ExchangeCR expone el tipo de cambio oficial USD/CRC (BCCR) mediante una REST API versionada. Todas las rutas viven bajo /api/v1 y devuelven JSON con un formato consistente.
https://exchangecr.com/api/v1Autenticación
Todos los endpoints —excepto /health, /openapi.json y /postman.json— requieren tu API key en el header x-api-key.
curl -H "x-api-key: YOUR_API_KEY" \ https://exchangecr.com/api/v1/exchange-rate/latestSolicitar API key
Formato de respuesta
Cada respuesta usa un envelope consistente: éxito con los datos, o error con un mensaje y un código legible.
// Success
{ "success": true, "data": { } }
// Error
{ "success": false, "message": "...", "error": "CODE" }Catálogo de errores
| Status | error | Cuándo |
|---|---|---|
| 400 | BAD_REQUEST | Parámetros inválidos o faltantes (fecha, días, rango). |
| 401 | UNAUTHORIZED | Falta o es inválida la API key. |
| 404 | NOT_FOUND | No existe dato para lo solicitado. |
| 429 | RATE_LIMITED | Demasiadas solicitudes (ver Retry-After). |
| 500 | INTERNAL_ERROR | Error interno del servidor. |
| 503 | — | Health check: base de datos inaccesible. |
Límites de uso
60 solicitudes por minuto por cliente (por API key, o por IP si no hay key), con X-RateLimit-Limit y X-RateLimit-Remaining. Además, cada API key tiene un cupo de 5.000 solicitudes al mes: las respuestas incluyen X-Quota-Limit y X-Quota-Remaining, y superarlo devuelve 429 con el código QUOTA_EXCEEDED. ¿Necesitás más? Contactanos para un plan personalizado.
Endpoints
Tipo de cambio
/exchange-rate/latestRequiere API keyÚltimo tipo de cambio
Obtén la tasa de compra y venta más reciente del par USD/CRC.
/exchange-rate?date=YYYY-MM-DDRequiere API keyPor fecha específica
Consulta el tipo de cambio de un día puntual.
- • date — required (YYYY-MM-DD)
/exchange-rate/history?days=30Requiere API keyHistorial
Los últimos N días de tasas (hasta 365), ideal para gráficos.
- • days — 1–365, default 30
/exchange-rate/range?from=&to=Requiere API keyRango de fechas
Todas las tasas entre dos fechas para análisis de períodos.
- • from, to — required (max 366 days)
Conversor
/convert?amount=1000&from=USD&to=CRCRequiere API keyConversor de montos
Convierte montos entre USD y CRC con la tasa oficial.
- • amount — required (> 0)
- • from, to — USD | CRC
- • rate — buy | sell (default sell)
- • date — optional
Analítica
/exchange-rate/analytics?days=30Requiere API keyAnalítica
Promedio, mínimo, máximo, variación, volatilidad y tendencia ya calculados.
- • days — default 30, or from & to
/exchange-rate/stats?period=monthly&from=&to=Requiere API keyEstadísticas por período
Agregados mensuales o anuales para un rango de fechas.
- • period — monthly | yearly
- • from, to — required
/exchange-rate/chart?days=90&points=60Requiere API keyDatos para gráficos
Serie optimizada y reducida a N puntos, con línea de tendencia.
- • days — default 30
- • points — 2–500, default 90
Bancos (ventanilla)
/banking/ratesRequiere API keyTasas por institución
Compra y venta de dólares por banco y casa de cambio (ventanilla).
- • date — optional
- • type — optional (entity type)
/banking/best?operation=sellRequiere API keyMejor tasa
Qué institución compra o vende dólares al mejor precio, con ranking.
- • operation — buy | sell (required)
Inteligencia artificial
/insights?days=30&locale=esRequiere API keyAI Market Insights
Resumen con IA de las causas probables de los movimientos y un veredicto.
- • days — default 30
- • locale — es | en
Sistema
/healthPúblicoEstado del servicio
Verifica la disponibilidad de la API y la última fecha registrada.
/openapi.jsonPúblicoOpenAPI 3.1 spec
Machine-readable spec of every endpoint.
/postman.jsonPúblicoPostman collection
Import into Postman to try everything.
Cómo consumir
SDK oficial (JavaScript / TypeScript)
import { ExchangeCR } from "@exchangecr/sdk";
const client = new ExchangeCR({ apiKey: process.env.EXCHANGE_API_KEY });
const latest = await client.getLatest();
const { result } = await client.convert({ amount: 1000, from: "USD", to: "CRC" });Next.js / JavaScript (fetch)
const res = await fetch(
"https://exchangecr.com/api/v1/exchange-rate/latest",
{ headers: { "x-api-key": process.env.EXCHANGE_API_KEY } }
);
const { data } = await res.json();
console.log(data.sell);Swift (URLSession)
var req = URLRequest(url: URL(string: "https://exchangecr.com/api/v1/exchange-rate/latest")!)
req.setValue("YOUR_API_KEY", forHTTPHeaderField: "x-api-key")
let (data, _) = try await URLSession.shared.data(for: req)cURL
curl -H "x-api-key: YOUR_API_KEY" \ "https://exchangecr.com/api/v1/exchange-rate/history?days=30"
Google Sheets
Usá funciones personalizadas para traer el tipo de cambio directo a una hoja. Pegá el script en Extensiones → Apps Script, guardá tu key con setExchangeApiKey('...') una vez, y empezá a usar =EXCHANGE…
| Función | Devuelve |
|---|---|
| =EXCHANGERATE([date],[type]) | La tasa (₡ por 1 USD), última o por fecha |
| =EXCHANGECONVERT(amount,from,to) | Monto convertido entre USD y CRC |
| =EXCHANGEHISTORY([days]) | Tabla Fecha · Compra · Venta |
| =EXCHANGEBEST(operation) | Mejor institución · compra · venta |
| =EXCHANGEANALYTICS([days]) | Promedio, min, max, variación, volatilidad |
Widgets embebibles
Mostrá el tipo de cambio en tu sitio con un iframe. Sin API key, se actualiza solo.
<iframe src="https://exchangecr.com/es/widget?theme=auto"
width="360" height="150" style="border:0"></iframe>