Autenticación y límites
Los endpoints de datos aceptan evaluación anónima: 12 solicitudes por minuto y 100 por hora e IP. Una clave aplica la cuota mensual de tu cuenta.
Campos que explican la frescura
`source` indica la clase de fuente, `market_session` el estado del mercado y `data_updated_at` la hora de la observación contribuyente más antigua de la respuesta. Guarda los tres.
Endpoints
Series intradía y cobertura
/v1/timeseries admite 1m, 5m, 15m, 1h, 4h y referencias diarias 1d; no hay 2h. Los cruces SGD sin USD no admiten 4h; USD/SGD y su inverso sí. La recopilación de mercado comenzó el 2026-09-14. Los datos 1m se conservan 30 días; los intervalos mayores no tienen caducidad programada. La retención no garantiza que ya exista toda esa profundidad.
Los cruces históricos requieren cierres reales del mismo intervalo UTC, separados como máximo 5 segundos. effective_at conserva la observación más antigua. No se rellenan huecos y el intervalo abierto puede cambiar. 1d usa referencias diarias de todo el catálogo. La tabla cuenta pares únicos; se admiten ambos sentidos.
| interval | Pares únicos |
|---|---|
1m | 91 |
5m | 91 |
15m | 91 |
1h | 91 |
4h | 79 |
1d | 465 |
Una ventana admitida sin observaciones devuelve HTTP 200 con data: [], has_more: false y next_cursor: null. Un intervalo desconocido devuelve unsupported_interval; un par fuera de cobertura, unsupported_pair_interval y rejected_pairs (HTTP 400). Las solicitudes mixtas se rechazan completas.
AUD, CAD, CHF, EUR, GBP, JPY, MXN, NOK, NZD, PLN, SEK, SGD, USD, ZAR
Cobertura y límites detallados
API de tipos de cambio intradía
WebSocket en vivo
Conecta a wss://api.exchangerate.dev/v1/stream y envía auth en 10 segundos. Guarda la clave en el servidor, nunca en la URL ni en JavaScript público. No hay conexiones anónimas. Tras authenticated, envía subscribe. El stream usa las monedas de abajo; los cruces requieren observaciones recientes de ambas monedas, separadas como máximo 5 segundos. Pueden aparecer estados unavailable o stale. Cada conexión aceptada consume una unidad de cuota mensual.
La tabla muestra los límites de las cuentas nuevas. Las cuentas existentes conservan Free 1 × 5, Basic 3 × 25 o Pro 10 × 100 (conexiones × pares por conexión). El mensaje authenticated indica tus límites efectivos.
AUD, CAD, CHF, EUR, GBP, JPY, MXN, NOK, NZD, PLN, SEK, SGD, USD, ZAR
| Plan | Conexiones simultáneas | Pares por conexión |
|---|---|---|
| Free | 0 | 0 |
| Basic | 0 | 0 |
| Pro | 0 | 0 |
| Realtime | 10 | 100 |
Errores
REST: Todos usan `{ result: "error", code, message }`. Un 429 añade `Retry-After`; no hay datos simulados cuando una fuente falla.
Úsala con tu stack
La misma solicitud funciona con curl, Python y JavaScript. No necesitas una clave para evaluar la API.
Respuesta de ejemplo
{
"result": "success",
"base": "USD",
"source": "live",
"sources": {
"EUR": "live",
"GBP": "live"
},
"market_session": "open",
"timestamp": "2026-06-15T12:00:00Z",
"data_updated_at": "2026-06-15T12:00:00Z",
"effective_at": {
"EUR": "2026-06-15T12:00:00Z",
"GBP": "2026-06-15T12:00:00Z"
},
"rates": {
"EUR": 0.86207,
"GBP": 0.74627
},
"derived_symbols": [],
"notice": "Indicative rates, not for settlement."
}rates.EUR es la cantidad de EUR por 1 USD. effective_at.EUR es la hora de observación y sources.EUR identifica la fuente. Valores y fechas ilustrativos.